76568db4be5f4be3b854581fee982da84211dc1d
[catagits/Gitalist.git] / local-lib5 / man / man3 / Catalyst::Test.3pm
1 .\" Automatically generated by Pod::Man v1.37, Pod::Parser v1.3
2 .\"
3 .\" Standard preamble:
4 .\" ========================================================================
5 .de Sh \" Subsection heading
6 .br
7 .if t .Sp
8 .ne 5
9 .PP
10 \fB\\$1\fR
11 .PP
12 ..
13 .de Sp \" Vertical space (when we can't use .PP)
14 .if t .sp .5v
15 .if n .sp
16 ..
17 .de Vb \" Begin verbatim text
18 .ft CW
19 .nf
20 .ne \\$1
21 ..
22 .de Ve \" End verbatim text
23 .ft R
24 .fi
25 ..
26 .\" Set up some character translations and predefined strings.  \*(-- will
27 .\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
28 .\" double quote, and \*(R" will give a right double quote.  | will give a
29 .\" real vertical bar.  \*(C+ will give a nicer C++.  Capital omega is used to
30 .\" do unbreakable dashes and therefore won't be available.  \*(C` and \*(C'
31 .\" expand to `' in nroff, nothing in troff, for use with C<>.
32 .tr \(*W-|\(bv\*(Tr
33 .ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
34 .ie n \{\
35 .    ds -- \(*W-
36 .    ds PI pi
37 .    if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
38 .    if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\"  diablo 12 pitch
39 .    ds L" ""
40 .    ds R" ""
41 .    ds C` ""
42 .    ds C' ""
43 'br\}
44 .el\{\
45 .    ds -- \|\(em\|
46 .    ds PI \(*p
47 .    ds L" ``
48 .    ds R" ''
49 'br\}
50 .\"
51 .\" If the F register is turned on, we'll generate index entries on stderr for
52 .\" titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and index
53 .\" entries marked with X<> in POD.  Of course, you'll have to process the
54 .\" output yourself in some meaningful fashion.
55 .if \nF \{\
56 .    de IX
57 .    tm Index:\\$1\t\\n%\t"\\$2"
58 ..
59 .    nr % 0
60 .    rr F
61 .\}
62 .\"
63 .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
64 .\" way too many mistakes in technical documents.
65 .hy 0
66 .if n .na
67 .\"
68 .\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
69 .\" Fear.  Run.  Save yourself.  No user-serviceable parts.
70 .    \" fudge factors for nroff and troff
71 .if n \{\
72 .    ds #H 0
73 .    ds #V .8m
74 .    ds #F .3m
75 .    ds #[ \f1
76 .    ds #] \fP
77 .\}
78 .if t \{\
79 .    ds #H ((1u-(\\\\n(.fu%2u))*.13m)
80 .    ds #V .6m
81 .    ds #F 0
82 .    ds #[ \&
83 .    ds #] \&
84 .\}
85 .    \" simple accents for nroff and troff
86 .if n \{\
87 .    ds ' \&
88 .    ds ` \&
89 .    ds ^ \&
90 .    ds , \&
91 .    ds ~ ~
92 .    ds /
93 .\}
94 .if t \{\
95 .    ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
96 .    ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
97 .    ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
98 .    ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
99 .    ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
100 .    ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
101 .\}
102 .    \" troff and (daisy-wheel) nroff accents
103 .ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
104 .ds 8 \h'\*(#H'\(*b\h'-\*(#H'
105 .ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
106 .ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
107 .ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
108 .ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
109 .ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
110 .ds ae a\h'-(\w'a'u*4/10)'e
111 .ds Ae A\h'-(\w'A'u*4/10)'E
112 .    \" corrections for vroff
113 .if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
114 .if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
115 .    \" for low resolution devices (crt and lpr)
116 .if \n(.H>23 .if \n(.V>19 \
117 \{\
118 .    ds : e
119 .    ds 8 ss
120 .    ds o a
121 .    ds d- d\h'-1'\(ga
122 .    ds D- D\h'-1'\(hy
123 .    ds th \o'bp'
124 .    ds Th \o'LP'
125 .    ds ae ae
126 .    ds Ae AE
127 .\}
128 .rm #[ #] #H #V #F C
129 .\" ========================================================================
130 .\"
131 .IX Title "Catalyst::Test 3"
132 .TH Catalyst::Test 3 "2009-10-12" "perl v5.8.7" "User Contributed Perl Documentation"
133 .SH "NAME"
134 Catalyst::Test \- Test Catalyst Applications
135 .SH "SYNOPSIS"
136 .IX Header "SYNOPSIS"
137 .Vb 2
138 \&    # Helper
139 \&    script/test.pl
140 .Ve
141 .PP
142 .Vb 5
143 \&    # Tests
144 \&    use Catalyst::Test 'TestApp';
145 \&    my $content  = get('index.html');           # Content as string
146 \&    my $response = request('index.html');       # HTTP::Response object
147 \&    my($res, $c) = ctx_request('index.html');      # HTTP::Response & context object
148 .Ve
149 .PP
150 .Vb 5
151 \&    use HTTP::Request::Common;
152 \&    my $response = request POST '/foo', [
153 \&        bar => 'baz',
154 \&        something => 'else'
155 \&    ];
156 .Ve
157 .PP
158 .Vb 2
159 \&    # Run tests against a remote server
160 \&    CATALYST_SERVER='http://localhost:3000/' prove \-r \-l lib/ t/
161 .Ve
162 .PP
163 .Vb 2
164 \&    use Catalyst::Test 'TestApp';
165 \&    use Test::More tests => 1;
166 .Ve
167 .PP
168 .Vb 1
169 \&    ok( get('/foo') =~ /bar/ );
170 .Ve
171 .PP
172 .Vb 8
173 \&    # mock virtual hosts
174 \&    use Catalyst::Test 'MyApp', { default_host => 'myapp.com' };
175 \&    like( get('/whichhost'), qr/served by myapp.com/ );
176 \&    like( get( '/whichhost', { host => 'yourapp.com' } ), qr/served by yourapp.com/ );
177 \&    {
178 \&        local $Catalyst::Test::default_host = 'otherapp.com';
179 \&        like( get('/whichhost'), qr/served by otherapp.com/ );
180 \&    }
181 .Ve
182 .SH "DESCRIPTION"
183 .IX Header "DESCRIPTION"
184 This module allows you to make requests to a Catalyst application either without
185 a server, by simulating the environment of an \s-1HTTP\s0 request using
186 HTTP::Request::AsCGI or remotely if you define the \s-1CATALYST_SERVER\s0
187 environment variable. This module also adds a few Catalyst-specific
188 testing methods as displayed in the method section.
189 .PP
190 The get and request
191 functions take either a \s-1URI\s0 or an HTTP::Request object.
192 .SH "INLINE TESTS WILL NO LONGER WORK"
193 .IX Header "INLINE TESTS WILL NO LONGER WORK"
194 While it used to be possible to inline a whole testapp into a \f(CW\*(C`.t\*(C'\fR file for a
195 distribution, this will no longer work.
196 .PP
197 The convention is to place your Catalyst test apps into \f(CW\*(C`t/lib\*(C'\fR in your
198 distribution. E.g.: \f(CW\*(C`t/lib/TestApp.pm\*(C'\fR, \f(CW\*(C`t/lib/TestApp/Controller/Root.pm\*(C'\fR,
199 etc..  Multiple test apps can be used in this way.
200 .PP
201 Then write your \f(CW\*(C`.t\*(C'\fR files like so:
202 .PP
203 .Vb 6
204 \&    use strict;
205 \&    use warnings;
206 \&    use FindBin '$Bin';
207 \&    use lib "$Bin/lib";
208 \&    use Test::More tests => 6;
209 \&    use Catalyst::Test 'TestApp';
210 .Ve
211 .SH "METHODS"
212 .IX Header "METHODS"
213 .Sh "$content = get( ... )"
214 .IX Subsection "$content = get( ... )"
215 Returns the content.
216 .PP
217 .Vb 1
218 \&    my $content = get('foo/bar?test=1');
219 .Ve
220 .PP
221 Note that this method doesn't follow redirects, so to test for a
222 correctly redirecting page you'll need to use a combination of this
223 method and the request method below:
224 .PP
225 .Vb 6
226 \&    my $res = request('/'); # redirects to /y
227 \&    warn $res\->header('location');
228 \&    use URI;
229 \&    my $uri = URI\->new($res\->header('location'));
230 \&    is ( $uri\->path , '/y');
231 \&    my $content = get($uri\->path);
232 .Ve
233 .Sh "$res = request( ... );"
234 .IX Subsection "$res = request( ... );"
235 Returns an HTTP::Response object. Accepts an optional hashref for request
236 header configuration; currently only supports setting 'host' value.
237 .PP
238 .Vb 2
239 \&    my $res = request('foo/bar?test=1');
240 \&    my $virtual_res = request('foo/bar?test=1', {host => 'virtualhost.com'});
241 .Ve
242 .SH "FUNCTIONS"
243 .IX Header "FUNCTIONS"
244 .ie n .Sh "($res, $c) = ctx_request( ... );"
245 .el .Sh "($res, \f(CW$c\fP) = ctx_request( ... );"
246 .IX Subsection "($res, $c) = ctx_request( ... );"
247 Works exactly like request, except it also returns the Catalyst context object,
248 \&\f(CW$c\fR. Note that this only works for local requests.
249 .ie n .Sh "$res = Catalyst::Test::local_request( $AppClass\fP, \f(CW$url );"
250 .el .Sh "$res = Catalyst::Test::local_request( \f(CW$AppClass\fP, \f(CW$url\fP );"
251 .IX Subsection "$res = Catalyst::Test::local_request( $AppClass, $url );"
252 Simulate a request using HTTP::Request::AsCGI.
253 .ie n .Sh "$res = Catalyst::Test::remote_request( $url );"
254 .el .Sh "$res = Catalyst::Test::remote_request( \f(CW$url\fP );"
255 .IX Subsection "$res = Catalyst::Test::remote_request( $url );"
256 Do an actual remote request using \s-1LWP\s0.
257 .Sh "action_ok"
258 .IX Subsection "action_ok"
259 Fetches the given \s-1URL\s0 and checks that the request was successful.
260 .Sh "action_redirect"
261 .IX Subsection "action_redirect"
262 Fetches the given \s-1URL\s0 and checks that the request was a redirect.
263 .Sh "action_notfound"
264 .IX Subsection "action_notfound"
265 Fetches the given \s-1URL\s0 and checks that the request was not found.
266 .ie n .Sh "content_like( $url\fP, \f(CW$regexp\fP [, \f(CW$test_name] )"
267 .el .Sh "content_like( \f(CW$url\fP, \f(CW$regexp\fP [, \f(CW$test_name\fP] )"
268 .IX Subsection "content_like( $url, $regexp [, $test_name] )"
269 Fetches the given \s-1URL\s0 and returns whether the content matches the regexp.
270 .Sh "contenttype_is"
271 .IX Subsection "contenttype_is"
272 Check for given \s-1MIME\s0 type.
273 .SH "SEE ALSO"
274 .IX Header "SEE ALSO"
275 Catalyst, Test::WWW::Mechanize::Catalyst,
276 Test::WWW::Selenium::Catalyst, Test::More, HTTP::Request::Common
277 .SH "AUTHORS"
278 .IX Header "AUTHORS"
279 Catalyst Contributors, see Catalyst.pm
280 .SH "COPYRIGHT"
281 .IX Header "COPYRIGHT"
282 This library is free software. You can redistribute it and/or modify it under
283 the same terms as Perl itself.