Catalyst::Test(3pm) | User Contributed Perl Documentation | Catalyst::Test(3pm) |
Catalyst::Test - Test Catalyst Applications
# Helper script/test.pl # Tests use Catalyst::Test 'TestApp'; my $content = get('index.html'); # Content as string my $response = request('index.html'); # HTTP::Response object my($res, $c) = ctx_request('index.html'); # HTTP::Response & context object use HTTP::Request::Common; my $response = request POST '/foo', [ bar => 'baz', something => 'else' ]; # Run tests against a remote server CATALYST_SERVER='http://localhost:3000/' prove -r -l lib/ t/ use Catalyst::Test 'TestApp'; use Test::More tests => 1; ok( get('/foo') =~ /bar/ ); # mock virtual hosts use Catalyst::Test 'MyApp', { default_host => 'myapp.com' }; like( get('/whichhost'), qr/served by myapp.com/ ); like( get( '/whichhost', { host => 'yourapp.com' } ), qr/served by yourapp.com/ ); { local $Catalyst::Test::default_host = 'otherapp.com'; like( get('/whichhost'), qr/served by otherapp.com/ ); }
This module allows you to make requests to a Catalyst application either without a server, by simulating the environment of an HTTP request using HTTP::Request::AsCGI or remotely if you define the CATALYST_SERVER environment variable. This module also adds a few Catalyst-specific testing methods as displayed in the method section.
The get and request functions take either a URI or an HTTP::Request object.
While it used to be possible to inline a whole test app into a ".t" file for a distribution, this will no longer work.
The convention is to place your Catalyst test apps into "t/lib" in your distribution. E.g.: "t/lib/TestApp.pm", "t/lib/TestApp/Controller/Root.pm", etc.. Multiple test apps can be used in this way.
Then write your ".t" files like so:
use strict; use warnings; use FindBin '$Bin'; use lib "$Bin/lib"; use Test::More tests => 6; use Catalyst::Test 'TestApp';
Returns the content.
my $content = get('foo/bar?test=1');
Note that this method doesn't follow redirects, so to test for a correctly redirecting page you'll need to use a combination of this method and the request method below:
my $res = request('/'); # redirects to /y warn $res->header('location'); use URI; my $uri = URI->new($res->header('location')); is ( $uri->path , '/y'); my $content = get($uri->path);
Note also that the content is returned as raw bytes, without any attempt to decode it into characters.
Returns an HTTP::Response object. Accepts an optional hashref for request header configuration; currently only supports setting 'host' value.
my $res = request('foo/bar?test=1'); my $virtual_res = request('foo/bar?test=1', {host => 'virtualhost.com'});
Alternately, you can pass in an HTTP::Request::Common object to set arbitrary request headers.
my $res = request(GET '/foo/bar', X-Foo => 'Bar', Authorization => 'Bearer JWT_HERE', ... );
Works exactly like request, except it also returns the Catalyst context object, $c. Note that this only works for local requests.
Fetches the given URL and checks that the request was successful. An optional second argument can be given to specify the name of the test.
Fetches the given URL and checks that the request was a redirect. An optional second argument can be given to specify the name of the test.
Fetches the given URL and checks that the request was not found. An optional second argument can be given to specify the name of the test.
Fetches the given URL and returns whether the content matches the regexp. An optional third argument can be given to specify the name of the test.
Verify the given URL has a content type of $type and optionally specify a test name.
Catalyst, Test::WWW::Mechanize::Catalyst, Test::WWW::Selenium::Catalyst, Test::More, HTTP::Request::Common
Catalyst Contributors, see Catalyst.pm
This library is free software. You can redistribute it and/or modify it under the same terms as Perl itself.
2020-09-13 | perl v5.30.3 |