X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FCatalyst%2FManual%2FTutorial%2F08_Testing.pod;h=eb33e628ba3dddd1b8d9fb75878e2ffaaf9807c2;hb=d5d7ee980cf02b9a519bc006a0f85b965d028ee2;hp=e0e629c5c6d5f23439e71a066f76fa5cd93b4ca2;hpb=0a2a4a5aba31b24b35d5b4b8dbf2cd0c36a7cb76;p=catagits%2FCatalyst-Manual.git diff --git a/lib/Catalyst/Manual/Tutorial/08_Testing.pod b/lib/Catalyst/Manual/Tutorial/08_Testing.pod index e0e629c..eb33e62 100644 --- a/lib/Catalyst/Manual/Tutorial/08_Testing.pod +++ b/lib/Catalyst/Manual/Tutorial/08_Testing.pod @@ -65,7 +65,7 @@ upgrade various pieces of your application over time. You can check out the source code for this example from the Catalyst Subversion repository as per the instructions in -L. +L. For an excellent introduction to learning the many benefits of testing your Perl applications and modules, you might want to read 'Perl Testing: @@ -167,10 +167,10 @@ For example: Although the Catalyst helper scripts provide a basic level of checks "for free," testing can become significantly more helpful when you write your own script to exercise the various parts of your application. The -L module +L module is very popular for writing these sorts of test cases. This module -extends L (and therefore -L) to allow you to automate the action of +extends L (and therefore +L) to allow you to automate the action of a user "clicking around" inside your application. It gives you all the benefits of testing on a live system without the messiness of having to use an actual web server, and a real person to do the clicking. @@ -188,8 +188,8 @@ editor and enter the following: # Can also do: # use Test::WWW::Mechanize::Catalyst "MyApp"; - use ok "Test::WWW::Mechanize::Catalyst" => "MyApp"; - + BEGIN { use_ok("Test::WWW::Mechanize::Catalyst" => "MyApp") } + # Create two 'user agents' to simulate two different users ('test01' & 'test02') my $ua1 = Test::WWW::Mechanize::Catalyst->new; my $ua2 = Test::WWW::Mechanize::Catalyst->new; @@ -282,13 +282,13 @@ editor and enter the following: The C test cases uses copious comments to explain each step of the process. In addition to the techniques shown here, there are a variety of other methods available in -L (for +L (for example, regex-based matching). Consult the documentation for more detail. B: For I vs. the "full application tests" approach used -by L, see -L. +by L, see +L. B The test script does not test the C and C actions. That is left as an exercise for the reader @@ -347,9 +347,13 @@ the state of the application right before or after the failure. You may wish to leverage the techniques discussed in this tutorial to maintain both a "production database" for your live application and a "testing database" for your test cases. One advantage to -L is that +L is that it runs your full application; however, this can complicate things when -you want to support multiple databases. One solution is to allow the +you want to support multiple databases. + +=head2 DATABASE CONFIG SWITCHING IN YOUR MODEL CLASS + +One solution is to allow the database specification to be overridden with an environment variable. For example, open C in your editor and change the C<__PACKAGE__-Econfig(...> declaration to resemble: @@ -376,15 +380,62 @@ launch your normal application without the C environment variable defined, it will default to the same C as before. +=head2 DATABASE CONFIG SWITCHING USING MULTIPLE CONFIG FILES + +By utilizing Ls functionality for loading +multiple config files based on environment variables you can override your +default (production) database connection settings. + +Setting C<$ENV{ MYAPP_CONFIG_LOCAL_SUFFIX }> to 'testing' in your test script +results in loading of an additional config file named myapp_testing.conf after +myapp.conf which will override any parameters in myapp.conf. + +You should set the environment variable in the BEGIN block of your test script +to make sure it's set before your Catalyst application is started. + +The following is an example for a config and test script for a DBIx::Class +model named MyDB and a controller named Foo: + +myapp_testing.conf: + + + + dsn dbi:SQLite:myapp.db + + + + +t/controller_Foo.t: + + use strict; + use warnings; + use Test::More; + + BEGIN { + $ENV{ MYAPP_CONFIG_LOCAL_SUFFIX } = 'testing'; + } + + eval "use Test::WWW::Mechanize::Catalyst 'MyApp'"; + plan $@ + ? ( skip_all => 'Test::WWW::Mechanize::Catalyst required' ) + : ( tests => 2 ); + + ok( my $mech = Test::WWW::Mechanize::Catalyst->new, 'Created mech object' ); + + $mech->get_ok( 'http://localhost/foo' ); + =head1 AUTHOR Kennedy Clark, C -Please report any errors, issues or suggestions to the author. The -most recent version of the Catalyst Tutorial can be found at +Feel free to contact the author for any errors or suggestions, but the +best way to report issues is via the CPAN RT Bug system at +. + +The most recent version of the Catalyst Tutorial can be found at L. -Copyright 2006-2008, Kennedy Clark, under Creative Commons License +Copyright 2006-2010, Kennedy Clark, under the +Creative Commons Attribution Share-Alike License Version 3.0 (L). -