我有一些看起来像这样的代码:
use SomeApp;
use Test::WWW::Mechanize::PSGI;
my $mech = Test::WWW::Mechanize::PSGI->new(
app => sub { SomeApp->run(@_) },
);
$mech->get_ok('/');
但是,一旦get_ok()
被调用,我就会收到以下警告:
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
是的,我正在将该端口用于其他用途。来自Test::WWW::Mechanize::PSGI 的文档:
此模块允许您测试 PSGI Web 应用程序,但不需要服务器或发出 HTTP 请求。相反,它将 HTTP 请求对象直接传递给 PSGI。
所以理论上,我不需要指定端口,但我收到了上述警告,并且获取的页面返回 500(它们在浏览器中工作正常)。我错过了什么?
- 测试::WWW::Mechanize::PSGI 版本 0.35
- Plack 版本 1.0030
- 催化剂版本 5.90051
更改MyApp->run
为MyApp->psgi_app
结果:
Can't call method "request" on an undefined value at .../5.18.1/Test/WWW/Mechanize/PSGI.pm line 47.
可以通过以下方式复制此错误:
catalyst.pl MyApp
cd MyApp
# run the test program above