次のようなコードがあります。
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 を返します (ブラウザーでは正常に動作します)。私は何が欠けていますか?
- Test::WWW::Mechanize::PSGI バージョン 0.35
- Plack バージョン 1.0030
- Catalyst バージョン 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