NAME
Test::WWW::Mechanize::CGIApp - Test::WWW::Mechanize for CGI::Application
SYNOPSIS
# We're in a t/*.t test script...
my
$mech
= Test::WWW::Mechanize::CGIApp->new;
# test a class that uses CGI::Application calling semantics.
# (in this case we'll new up an instance of the app and call
# its ->run() method)
#
$mech
->app(
"My::WebApp"
);
$mech
->get_ok(
"?rm=my_run_mode&arg1=1&arg2=42"
);
# test a class that uses CGI::Application::Dispatch
# to locate the run_mode
# (in this case we'll just call the ->dispatch() class method).
#
my
$dispatched_mech
= Test::WWW::Mechanize::CGIApp->new;
$dispatched_mech
->app(
"My::DispatchApp"
);
$mech
->get_ok(
"/WebApp/my_run_mode?arg1=1&arg2=42"
);
# create an anonymous sub that this class will use to
# handle the request.
#
# this could be useful if you need to do something novel
# after creating an instance of your class (e.g. the
# fiddle_with_stuff() below) or maybe you have a unique
# way to get the app to run.
#
my
$custom_mech
= Test::WWW::Mechanize::CGIApp->new;
$custom_mech
->app(
sub
{
require
"My::WebApp"
;
my
$app
= My::WebApp->new();
$app
->fiddle_with_stuff();
$app
->run();
});
$mech
->get_ok(
"?rm=my_run_mode&arg1=1&arg2=42"
);
# at this point you can play with all kinds of cool
# Test::WWW::Mechanize testing methods.
is(
$mech
->ct,
"text/html"
);
$mech
->title_is(
"Root"
,
"On the root page"
);
$mech
->content_contains(
"This is the root page"
,
"Correct content"
);
$mech
->follow_link_ok({
text
=>
'Hello'
},
"Click on Hello"
);
# ... and all other Test::WWW::Mechanize methods
DESCRIPTION
This package makes testing CGIApp based modules fast and easy. It takes advantage of Test::WWW::Mechanize to provide functions for common web testing scenarios. For example:
$mech
->get_ok(
$page
);
$mech
->title_is(
"Invoice Status"
,
"Make sure we're on the invoice page"
);
$mech
->content_contains(
"Andy Lester"
,
"My name somewhere"
);
$mech
->content_like(
qr/(cpan|perl)\.org/
,
"Link to perl.org or CPAN"
);
For applications that inherit from CGI::Application it will handle requests by creating a new instance of the class and calling its run
method. For applications that use CGI::Application::Dispatch it will call the dispatch
class method. If neither of these options are the right thing, you can set a reference to a sub that will be used to handle the request.
This module supports cookies automatically.
Check out Test::WWW::Mechanize for more information about all of the cool things you can test!
CONSTRUCTOR
new
Behaves like, and calls, Test::WWW::Mechanize's new
method. It optionally uses an "app" parameter (see below), any other parameters get passed to Test::WWW::Mechanize's constructor. Note that you can either pass the name of the CGI::Application into the constructor using the "app" parameter or set it later using the app
method.
my
$mech
= Test::WWW::Mechanize::CGIApp->new;
# or
my
$mech
= Test::WWW::Mechanize::CGIApp->new(
app
=>
'TestApp'
);
METHODS
$mech->app($app_handler)
This method provides a mechanism for informing Test::WWW::Mechanize::CGIApp how it should go about executing your run_mode. If you set it to the name of a class, then it will load the class and either create an instance and ->run() it (if it's CGI::Application based), invoke the ->dispatch() method if it's CGI::Application::Dispatch based, or call the supplied anonymous subroutine and let it do all of the heavy lifting.
SEE ALSO
Related modules which may be of interest: Test::WWW::Mechanize, WWW::Mechanize.
Various implementation tricks came from Test::WWW::Mechanize::Catalyst.
AUTHOR
George Hartzell, <hartzell@alerce.com>
based on Test::WWW::Mechanize::Catalyst by Leon Brocard, <acme@astray.com>
.
COPYRIGHT
Copyright (C) 2007, George Hartzell
This module is free software; you can redistribute it or modify it under the same terms as Perl itself.