2 Catalyst::Test::MessageDriven;
8 $ENV{CATALYST_ENGINE} = 'Test::MessageDriven';
13 Catalyst::Test::MessageDriven - test message-driven Catalyst apps
17 Derived from Catalyst::Test, this module provides a way to run tests
18 against message-driven Catalyst applications - those with
19 Catalyst::Controller::MessageDriven-based controllers, and expect to
20 run with Catalyst::Engine::Stomp.
24 BEGIN { use_ok 'Catalyst::Test::MessageDriven', 'SomeApp' };
26 my $req = '... some message text ...';
27 my $queue = 'somequeue';
28 my $res = request($queue, $req);
33 =head2 request(queue, message)
35 This function accepts a queue and a message, and runs the request in
36 that context. Returns a response object.
40 Some test wrappers - successful / error message conditions?
44 my $message_driven_request = sub {
45 my ($app, $path, $req_message) = @_;
46 my $url = "message://localhost:61613/$path";
48 my $request = HTTP::Request->new( POST => $url );
49 $request->content($req_message);
50 $request->content_length(length $req_message);
51 $request->content_type('application/octet-stream');
54 $app->handle_request($request, \$response);
59 my $build_exports = sub {
60 my ($self, $meth, $args, $defaults) = @_;
63 my $class = $args->{class};
66 $request = sub { Catalyst::Exception->throw("Must specify a test app: use Catalyst::Test::MessageDriven 'TestApp'") };
69 unless (Class::MOP::is_class_loaded($class)) {
70 Class::MOP::load_class($class);
74 my $app = $class->run();
75 $request = sub { $message_driven_request->( $app, @_ ) };
84 my $import = Sub::Exporter::build_exporter({
85 groups => [ all => $build_exports ],
90 my ($self, $class) = @_;
91 $import->($self, '-all' => { class => $class });
96 package # Hide from PAUSE
97 Catalyst::Engine::Test::MessageDriven;
98 use base 'Catalyst::Engine::Embeddable';
101 my ($self, $app) = @_;