gpt4 book ai didi

perl - 为什么 Test::WWW::Mechanize::PSGI 使用端口?

转载 作者:行者123 更新时间:2023-12-02 14:04:34 24 4
gpt4 key购买 nike

我有一些代码,如下所示:

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

是的,我正在将该端口用于其他用途。来自 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.

所以理论上,我不需要指定端口,但我收到上述警告,并且获取的页面返回 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

最佳答案

Catalyst 的 run 方法实际上会运行 HTTP 服务器(通过 Plack/PSGI!)进行开发,这不是您想要通过 PSGI 进行测试(不运行服务器)的结果。您需要:app => MyApp->psgi_app,没有额外的sub block ,因为psgi_app应该返回PSGI应用程序本身。

当您的应用返回不符合 PSGI 规范的内容时,错误消息“无法在...上调用方法‘请求’”是一个常见错误。该消息在 git master 上得到了一些改进,但这本质上是一个用户错误,因为当它只需要 $app 时,您基本上返回了 sub { $app }

有关 Catalyst 的 PSGI 支持的更多文档可通过 perldoc Catalyst::PSGI 获得。

关于perl - 为什么 Test::WWW::Mechanize::PSGI 使用端口?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20812992/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com