Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Perl 测试Mojo-过早连接关闭_Perl_Mojolicious - Fatal编程技术网

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超时。
此外,如果编写非阻塞代码,则必须在以后进行
渲染

有一天,我需要option
max_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