1Dancer2::Manual::TestinUgs(e3r)Contributed Perl DocumentDaatnicoenr2::Manual::Testing(3)
2
3
4
6 Dancer2::Manual::Testing - Writing tests for Dancer2
7
9 version 0.400000
10
12 Since Dancer2 produces PSGI applications, you can easily write tests
13 using Plack::Test and provide your Dancer application as the app for
14 testing.
15
16 A basic test (which we also scaffold with dancer2) looks like this:
17
18 use strict;
19 use warnings;
20
21 use Test::More tests => 4;
22 use Plack::Test;
23 use HTTP::Request::Common;
24
25 use_ok('MyApp');
26
27 # create an application
28 my $app = MyApp->to_app;
29 isa_ok( $app, 'CODE' );
30
31 # create a testing object
32 my $test = Plack::Test->create($app);
33
34 # now you can call requests on it and get responses
35 # requests are of HTTP::Request
36 # responses are of HTTP::Response
37
38 # "GET" from HTTP::Request::Common creates an HTTP::Request object
39 my $response = $test->request( GET '/' );
40
41 # same as:
42 # my $response = $test->request( HTTP::Request->new( GET => '/' ) );
43
44 ok( $response->is_success, 'Successful request' );
45 is( $response->content, 'OK', 'Correct response content' );
46
47 Read the documentation for HTTP::Request and HTTP::Request::Common to
48 see the different options for sending parameters.
49
51 If you don't want to use an entire user agent for this test, you can
52 use HTTP::Cookies to store cookies and then retrieve them:
53
54 use strict;
55 use warnings;
56
57 use Test::More tests => 3;
58 use Plack::Test;
59 use HTTP::Request::Common;
60 use HTTP::Cookies;
61
62 use_ok('MyApp');
63
64 my $url = 'http://localhost';
65 my $jar = HTTP::Cookies->new();
66 my $test = Plack::Test->create( MyApp->to_app );
67
68 subtest 'Create session' => sub {
69 my $res = $test->request( GET "$url/login" );
70 ok( $res->is_success, 'Successful login' );
71
72 # extract cookies from the response and store in the jar
73 $jar->extract_cookies($res);
74 };
75
76 subtest 'Check session' => sub {
77 my $req = GET "$url/logout";
78
79 # add cookies to the request
80 $jar->add_cookie_header($req);
81
82 my $res = $test->request($req);
83 ok( $res->is_success, 'Successful logout' );
84 like(
85 $res->content,
86 'Successfully logged out',
87 'Got correct log out content',
88 );
89 };
90
91 Please note that the request URL must include scheme and host for the
92 call to "add_cookie_header" in HTTP::Cookies to work.
93
95 In order to test plugins, you can create an application on the spot, as
96 part of the test script code, and use the plugin there.
97
98 use strict;
99 use warnings;
100
101 use Test::More tests => 2;
102 use Plack::Test;
103 use HTTP::Request::Common;
104
105 {
106 package MyTestApp;
107 use Dancer2;
108 use Dancer2::Plugin::MyPlugin;
109
110 get '/' => sub { my_keyword };
111 }
112
113 my $test = Plack::Test->create( MyTestApp->to_app );
114 my $res = $test->request( GET '/' );
115
116 ok( $res->is_success, 'Successful request' );
117 is( $res->content, 'MyPlugin-MyKeyword', 'Correct content' );
118
120 Dancer Core Developers
121
123 This software is copyright (c) 2022 by Alexis Sukrieh.
124
125 This is free software; you can redistribute it and/or modify it under
126 the same terms as the Perl 5 programming language system itself.
127
128
129
130perl v5.36.0 2023-01-20 Dancer2::Manual::Testing(3)