Perl 测试Mojo-过早连接关闭
我正在使用以下代码测试我的应用程序:Perl 测试Mojo-过早连接关闭,perl,mojolicious,Perl,Mojolicious,我正在使用以下代码测试我的应用程序: use Carp; use Carp::Heavy; use Mojo::Base -strict; use Test::More; use Test::Mojo; use FindBin; require "$FindBin::Bin/../script/MyApp"; my $t = Test::Mojo->new( 'MyDb' ); $t->ua->max_redirects(10); $t->ua->inactiv
use Carp; use Carp::Heavy;
use Mojo::Base -strict;
use Test::More;
use Test::Mojo;
use FindBin;
require "$FindBin::Bin/../script/MyApp";
my $t = Test::Mojo->new( 'MyDb' );
$t->ua->max_redirects(10);
$t->ua->inactivity_timeout(3600);
$t->ua->connect_timeout(3600);
$t->get_ok('/int/ap/profit/2015-01-01/2015-03-31/overview')
->status_is(200)
->text_is('html body h3' => 'Überblick')
->text_is('tr:nth-child(2) td:nth-child(8)' => '2.000,00')
->text_is('tr:nth-child(5) td:nth-child(8)' => '4.000,00')
;
done_testing();
此测试失败,连接过早关闭。然而,在morbo上运行相同的请求会将预期的html代码返回给浏览器。似乎
$t->ua->inactivity\u超时(3600)代码>在这里没有任何作用。长时间操作需要在客户端和服务器端不活动\u超时。
此外,如果编写非阻塞代码,则必须在以后进行渲染
有一天,我需要optionmax_connections
,但我不记得为什么了。
因此,在这一天之后,我总是将max\u connections(0)
添加到我的测试中:)
例如,见
当你发布你的问题时,你应该写一个简单的mojolicious lite示例,其中包含所有有错误的逻辑。所以,现在您展示正确的测试代码,并询问为什么没有主逻辑它就不能工作:)这很奇怪。如果您有具体的问题,没有人会回答您或提出可能的事件。基于@logionin和
这是他的一把叉子
使用Mojo::Base-strict;
使用Mojo::IOLoop;
使用mojolicous::Lite;
使用测试::更多;
使用Test::Mojo;
获取'/delayed'=>sub{
my$c=shift->render\u稍后;
$c->不活动\超时(5);
Mojo::IOLoop->timer(3=>sub{
$c->render(json=>{result=>'ok'});
});
};
获取“/premature”=>sub{
我的$c=班次;
#$c->render(文本=>'待继续…',状态=>206);
$c->tx->res->headers->connection('close');
$c->已渲染(123);
};
my$t=Test::Mojo->new;
子测试“足够超时”=>sub{
$t->ua->不活动\超时(5);
$t->get_ok(“/延迟”)
->状态为(200)
->json_是('/result'=>'ok')
;
};
子测试“超时不足”=>sub{
$t->ua->不活动\超时(1);
$t->get_失败(“/延迟”)
->状态(200)
->内容是(“”,“无内容”)
;
};
子测试“突然关闭”=>子测试{
$t->ua->不活动\超时(5);
$t->ua->最大连接数(0);
$t->get_fail(“/premature”)
->状态(200)
->内容是(“”,“无内容”)
;
};
完成测试();
包装测试:Mojo;
使用测试::更多;
子对象获取失败{
我的($self,$uri)=@;
待办事项:{
本地$TODO='get_fail';
返回$self->get_ok($uri);
}
}
相应的输出为:
# Subtest: enough timeout
ok 1 - GET /delayed
ok 2 - 200 OK
ok 3 - exact match for JSON Pointer "/result"
1..3
ok 1 - enough timeout
# Subtest: not enough timeout
# Inactivity timeout
not ok 1 - GET /delayed # TODO get_fail
# Failed (TODO) test 'GET /delayed'
# at D:/TMP-aux/MSP-reports2/1-fork-quick.pl line 60.
ok 2 - not 200 OK
ok 3 - no content
1..3
ok 2 - not enough timeout
# Subtest: sudden close
# Premature connection close
not ok 1 - GET /premature # TODO get_fail
# Failed (TODO) test 'GET /premature'
# at D:/TMP-aux/MSP-reports2/1-fork-quick.pl line 60.
ok 2 - not 200 OK
ok 3 - no content
1..3
ok 3 - sudden close
1..3