In this example we'll see how to accept POST parameters in a Dancer 1 application. We'll also see how to write tests for it.
Directory Layout
.
├── bin
│ └── app.pl
├── lib
│ └── App.pm
└── t
└── 01-index.t
Code launching the app
examples/dancer/app4/bin/app.pl
#!/usr/bin/env perl
use Dancer;
use App;
dance;
The code of the application
examples/dancer/app4/lib/App.pm
package App;
use strict;
use warnings;
use Dancer ':syntax';
get '/' => sub {
return q{
<h1>Echo with POST</h1>
<form action="/echo" method="POST">
<input type="text" name="txt">
<input type="submit" value="Send">
</form>
};
};
post '/echo' => sub {
return 'You sent: ' . param('txt');
};
true;
The test code
examples/dancer/app4/t/01-index.t
use Test::More tests => 2;
use strict;
use warnings;
# the order is important
use App;
use Dancer::Test;
subtest index => sub {
my $resp = dancer_response GET => '/';
is $resp->status, 200;
like $resp->content, qr{<h1>Echo with POST</h1>};
like $resp->content, qr{<form};
};
subtest echo_post => sub {
my $resp = dancer_response POST => '/echo', {
params => {
txt => 'Hello World!',
}
};
is $resp->status, 200;
is $resp->content, 'You sent: Hello World!';
};
The call to dancer_response
returns a Dancer::Respons
object. Feel free to use its methods.
Running the tests
Be in the root directory of your project. (The common parent directory of bin, lib, and t.) and type:
prove -l
or
prove -lv
for more verbose output.