GSP
Quick Navigator

Search Site

Unix VPS
A - Starter
B - Basic
C - Preferred
D - Commercial
MPS - Dedicated
Previous VPSs
* Sign Up! *

Support
Contact Us
Online Help
Handbooks
Domain Status
Man Pages

FAQ
Virtual Servers
Pricing
Billing
Technical

Network
Facilities
Connectivity
Topology Map

Miscellaneous
Server Agreement
Year 2038
Credits
 

USA Flag

 

 

Man Pages
Plack::Test(3) User Contributed Perl Documentation Plack::Test(3)

Plack::Test - Test PSGI applications with various backends

  use Plack::Test;
  use HTTP::Request::Common;

  # Simple OO interface
  my $app = sub { return [ 200, [], [ "Hello" ] ] };
  my $test = Plack::Test->create($app);

  my $res = $test->request(GET "/");
  is $res->content, "Hello";

  # traditional - named params
  test_psgi
      app => sub {
          my $env = shift;
          return [ 200, [ 'Content-Type' => 'text/plain' ], [ "Hello World" ] ],
      },
      client => sub {
          my $cb  = shift;
          my $req = HTTP::Request->new(GET => "http://localhost/hello");
          my $res = $cb->($req);
          like $res->content, qr/Hello World/;
      };

  # positional params (app, client)
  my $app = sub { return [ 200, [], [ "Hello" ] ] };
  test_psgi $app, sub {
      my $cb  = shift;
      my $res = $cb->(GET "/");
      is $res->content, "Hello";
  };

Plack::Test is a unified interface to test PSGI applications using HTTP::Request and HTTP::Response objects. It also allows you to run PSGI applications in various ways. The default backend is "Plack::Test::MockHTTP", but you may also use any Plack::Handler implementation to run live HTTP requests against a web server.

create
  $test = Plack::Test->create($app, %options);
    

creates an instance of Plack::Test implementation class. $app has to be a valid PSGI application code reference.

request
  $res = $test->request($request);
    

takes an HTTP::Request object, runs it through the PSGI application to test and returns an HTTP::Response object.

Plack::Test also provides a functional interface that takes two callbacks, each of which represents PSGI application and HTTP client code that tests the application.
test_psgi
  test_psgi $app, $client;
  test_psgi app => $app, client => $client;
    

Runs the client test code $client against a PSGI application $app. The client callback gets one argument $cb, a callback that accepts an "HTTP::Request" object and returns an "HTTP::Response" object.

Use HTTP::Request::Common to import shortcuts for creating requests for "GET", "POST", "DELETE", and "PUT" operations.

For your convenience, the "HTTP::Request" given to the callback automatically uses the HTTP protocol and the localhost (127.0.0.1 by default), so the following code just works:

  use HTTP::Request::Common;
  test_psgi $app, sub {
      my $cb  = shift;
      my $res = $cb->(GET "/hello");
  };
    

Note that however, it is not a good idea to pass an arbitrary (i.e. user-input) string to "GET" or even "HTTP::Request->new" by assuming that it always represents a path, because:

  my $req = GET "//foo/bar";
    

would represent a request for a URL that has no scheme, has a hostname foo and a path /bar, instead of a path //foo/bar which you might actually want.

Specify the Plack::Test backend using the environment variable "PLACK_TEST_IMPL" or $Plack::Test::Impl package variable.

The available values for the backend are:

MockHTTP
(Default) Creates a PSGI env hash out of HTTP::Request object, runs the PSGI application in-process and returns HTTP::Response.
Server
Runs one of Plack::Handler backends ("Standalone" by default) and sends live HTTP requests to test.
ExternalServer
Runs tests against an external server specified in the "PLACK_TEST_EXTERNALSERVER_URI" environment variable instead of spawning the application in a server locally.

For instance, test your application with the "HTTP::Server::ServerSimple" server backend with:

  > env PLACK_TEST_IMPL=Server PLACK_SERVER=HTTP::Server::ServerSimple \
    prove -l t/test.t

Tatsuhiko Miyagawa
2020-11-30 perl v5.32.1

Search for    or go to Top of page |  Section 3 |  Main Index

Powered by GSP Visit the GSP FreeBSD Man Page Interface.
Output converted with ManDoc.