[dancer-users] Dancer::Test and params()

Tom Hukins tom at eborcom.com
Tue Sep 3 14:26:01 BST 2013


I'm working with a Dancer 1 code base that uses Dancer::Test to test

One particular route does the following:

    post '/register' => sub {
        my $user = param( 'user, 'post' );
        my $password = param( 'pass', 'post' );

And it has tests like this:

    my $response = dancer_response POST => 'register',
        { params => { user => 'me', pass => 'secret' } };

However, I notice that param() only takes one argument, the name of
the parameter to fetch.  Unlike params(), it cannot specify the
parameter's source.

I also notice that the documentation for Dancer::Test doesn't state
what it does with "params" passed to it.  I expect the author of the
code I maintain intended to pass these in the HTTP body, whereas I
notice it passes them in the query string.  Currently, I can encode
POST parameters myself and pass them to dancer_response() in the
"body" argument, as "body" must contain a string.

I plan to implement the following, but thought I would see if anyone
objects before I do so:

1. Document that the "params" argument to dancer_response() always
populates the query string, even for POST requests.

2. Allow the "body" argument to dancer_response() to take a hash
reference as well as a string and make dancer_response() serialise the
hash reference.

3. Have Dancer::param() warn if passed more than one argument to help
people who mistakenly assume it takes the same arguments as params().

Do my plans seem reasonable?  Have I missed a better approach?


More information about the dancer-users mailing list