Test::Mojo + prove 导致重复记录
Test::Mojo + prove leads to duplicate logging
我有以下使用 Test::Mojo 的测试脚本。当我从命令行使用 perl 运行 它时,它输出正确。但是,当我 运行 它通过 "prove -v" 时,Mojo 日志记录被复制并且其中之一没有通过 "on message".
进行管道传输
#!/usr/bin/env perl
use strict;
use warnings;
use Test::More tests => 1;
use Mojolicious::Lite;
use Test::Mojo;
app->log->on(
message => sub {
my ( $log, $level, @lines ) = @_;
note "MojoLog $level: @lines";
}
);
get '/debug/mojo/req_url' => sub {
my $c = shift;
$c->render( text => $c->req->url );
};
subtest 'Mojo - $c->req->url' => sub {
plan tests => 3;
my $t = Test::Mojo->new;
$t->get_ok('/debug/mojo/req_url') #
->status_is(200) #
->content_is('/debug/mojo/req_url');
};
直接运行时输出:
$ perl dup_logging.t
1..1
# Subtest: Mojo - $c->req->url
1..3
# MojoLog debug: GET "/debug/mojo/req_url"
# MojoLog debug: Routing to a callback
# MojoLog debug: 200 OK (0.000797s, 1254.705/s)
ok 1 - GET /debug/mojo/req_url
ok 2 - 200 OK
ok 3 - exact match for content
ok 1 - Mojo - $c->req->url
并通过证明运行时的输出:
$ prove -v dup_logging.t
dup_logging.t ..
1..1
# Subtest: Mojo - $c->req->url
1..3
[Thu Mar 8 12:16:35 2018] [debug] GET "/debug/mojo/req_url"
# MojoLog debug: GET "/debug/mojo/req_url"
[Thu Mar 8 12:16:35 2018] [debug] Routing to a callback
# MojoLog debug: Routing to a callback
[Thu Mar 8 12:16:35 2018] [debug] 200 OK (0.000842s, 1187.648/s)
# MojoLog debug: 200 OK (0.000842s, 1187.648/s)
ok 1 - GET /debug/mojo/req_url
ok 2 - 200 OK
ok 3 - exact match for content
ok 1 - Mojo - $c->req->url
ok
All tests successful.
Files=1, Tests=1, 1 wallclock secs ( 0.03 usr 0.01 sys + 0.34 cusr 0.03 csys = 0.41 CPU)
Result: PASS
以下是我的版本信息:
$ perl -MMojolicious -E 'say Mojolicious->VERSION'
7.14
$ prove --version
TAP::Harness v3.36 and Perl v5.16.3
我发现避免此问题的一种方法是在脚本顶部设置 MOJO_LOG_LEVEL 环境变量。
$ENV{MOJO_LOG_LEVEL} = 'fatal';
关于如何证明和 Test::Mojo 在日志记录方面一起玩得好还有其他建议吗?
证明测试运行ner 使用TAP::Harness
基础设施。当您 运行 prove -v
时,这将设置 HARNESS_IS_VERBOSE
环境变量。
然后,Mojo::Test 选择这个环境变量:
# Silent or loud tests
$ENV{MOJO_LOG_LEVEL} ||= $ENV{HARNESS_IS_VERBOSE} ? 'debug' : 'fatal';
您因此在 运行 宁 prove -v
时收到 Mojo 的调试日志消息。
如果您不想要此输出,手动设置 MOJO_LOG_LEVEL env 变量似乎是最好的方法。
我有以下使用 Test::Mojo 的测试脚本。当我从命令行使用 perl 运行 它时,它输出正确。但是,当我 运行 它通过 "prove -v" 时,Mojo 日志记录被复制并且其中之一没有通过 "on message".
进行管道传输#!/usr/bin/env perl
use strict;
use warnings;
use Test::More tests => 1;
use Mojolicious::Lite;
use Test::Mojo;
app->log->on(
message => sub {
my ( $log, $level, @lines ) = @_;
note "MojoLog $level: @lines";
}
);
get '/debug/mojo/req_url' => sub {
my $c = shift;
$c->render( text => $c->req->url );
};
subtest 'Mojo - $c->req->url' => sub {
plan tests => 3;
my $t = Test::Mojo->new;
$t->get_ok('/debug/mojo/req_url') #
->status_is(200) #
->content_is('/debug/mojo/req_url');
};
直接运行时输出:
$ perl dup_logging.t
1..1
# Subtest: Mojo - $c->req->url
1..3
# MojoLog debug: GET "/debug/mojo/req_url"
# MojoLog debug: Routing to a callback
# MojoLog debug: 200 OK (0.000797s, 1254.705/s)
ok 1 - GET /debug/mojo/req_url
ok 2 - 200 OK
ok 3 - exact match for content
ok 1 - Mojo - $c->req->url
并通过证明运行时的输出:
$ prove -v dup_logging.t
dup_logging.t ..
1..1
# Subtest: Mojo - $c->req->url
1..3
[Thu Mar 8 12:16:35 2018] [debug] GET "/debug/mojo/req_url"
# MojoLog debug: GET "/debug/mojo/req_url"
[Thu Mar 8 12:16:35 2018] [debug] Routing to a callback
# MojoLog debug: Routing to a callback
[Thu Mar 8 12:16:35 2018] [debug] 200 OK (0.000842s, 1187.648/s)
# MojoLog debug: 200 OK (0.000842s, 1187.648/s)
ok 1 - GET /debug/mojo/req_url
ok 2 - 200 OK
ok 3 - exact match for content
ok 1 - Mojo - $c->req->url
ok
All tests successful.
Files=1, Tests=1, 1 wallclock secs ( 0.03 usr 0.01 sys + 0.34 cusr 0.03 csys = 0.41 CPU)
Result: PASS
以下是我的版本信息:
$ perl -MMojolicious -E 'say Mojolicious->VERSION'
7.14
$ prove --version
TAP::Harness v3.36 and Perl v5.16.3
我发现避免此问题的一种方法是在脚本顶部设置 MOJO_LOG_LEVEL 环境变量。
$ENV{MOJO_LOG_LEVEL} = 'fatal';
关于如何证明和 Test::Mojo 在日志记录方面一起玩得好还有其他建议吗?
证明测试运行ner 使用TAP::Harness
基础设施。当您 运行 prove -v
时,这将设置 HARNESS_IS_VERBOSE
环境变量。
然后,Mojo::Test 选择这个环境变量:
# Silent or loud tests
$ENV{MOJO_LOG_LEVEL} ||= $ENV{HARNESS_IS_VERBOSE} ? 'debug' : 'fatal';
您因此在 运行 宁 prove -v
时收到 Mojo 的调试日志消息。
如果您不想要此输出,手动设置 MOJO_LOG_LEVEL env 变量似乎是最好的方法。