NAME
Catalyst::Test - Test Catalyst Applications
SYNOPSIS
# Helper
script/test.pl
# Tests
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
my
$response
= request POST
'/foo'
, [
bar
=>
'baz'
,
something
=>
'else'
];
# Run tests against a remote server
ok( get(
'/foo'
) =~ /bar/ );
# mock virtual hosts
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/
);
}
DESCRIPTION
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.
INLINE TESTS WILL NO LONGER WORK
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:
METHODS
$content = get( ... )
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.
$res = request( ... );
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'
,
...
);
($res, $c) = ctx_request( ... );
Works exactly like request, except it also returns the Catalyst context object, $c
. Note that this only works for local requests.
action_ok($url [, $test_name ])
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.
action_redirect($url [, $test_name ])
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.
action_notfound($url [, $test_name ])
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.
content_like( $url, $regexp [, $test_name ] )
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.
contenttype_is($url, $type [, $test_name ])
Verify the given URL has a content type of $type and optionally specify a test name.
SEE ALSO
Catalyst, Test::WWW::Mechanize::Catalyst, Test::WWW::Selenium::Catalyst, Test::More, HTTP::Request::Common
AUTHORS
Catalyst Contributors, see Catalyst.pm
COPYRIGHT
This library is free software. You can redistribute it and/or modify it under the same terms as Perl itself.