I have some code that looks like this:
use SomeApp;
use Test::WWW::Mechanize::PSGI;
my $mech = Test::WWW::Mechanize::PSGI->new(
app => sub { SomeApp->run(@_) },
);
$mech->get_ok('/');
However, as soon as get_ok()
is called, I get the following warning:
PSGI error: failed to listen to port 8080: Address already in use at .../5.18.1/HTTP/Server/PSGI.pm line 94.
HTTP::Server::PSGI::setup_listener('HTTP::Server::PSGI=HASH(0x7fe6622fad60)') called at .../5.18.1/HTTP/Server/PSGI.pm line 54
And yes, I'm using that port for something else. From the docs of Test::WWW::Mechanize::PSGI:
This module allows you to test PSGI web applications but does not require a server or issue HTTP requests. Instead, it passes the HTTP request object directly to PSGI.
So in theory, I shouldn't need to specify a port, but I get the above warning and pages fetched return a 500 (they work fine in the browser). What am I missing?
- Test::WWW::Mechanize::PSGI version 0.35
- Plack version 1.0030
- Catalyst version 5.90051
Changing MyApp->run
to MyApp->psgi_app
results in:
Can't call method "request" on an undefined value at .../5.18.1/Test/WWW/Mechanize/PSGI.pm line 47.
This error can be replicated with:
catalyst.pl MyApp
cd MyApp
# run the test program above
SomeApp
contains, but have you ever triedPlack::Util::load_psgi
?my $mech = Test::WWW::Mechanize::PSGI->new(app => Plack::Util::load_psgi('SomeApp'));
– EnsError while loading MyApp.pm: Setting config after setup has been run is not allowed
even with a plaincatalyst.pl SomeApp
. I've posted a workaround as an answer. Also, if I wrap it in a sub (required) and remove the "use SomeApp", I getCan't call method "request" on an undefined value
. – Cerracchio