无法在perl催化剂应用程序中使用Test :: WWW :: Mechanize :: Catalyst在测试用例中打印变量/哈希

时间:2016-11-19 07:55:47

标签: perl testing catalyst

我正在使用Test :: WWW :: Mechanize :: Catalyst为基于Perl Catalyst的Web应用程序编写测试用例。我卡在某处,我想通过打印变量/哈希值进行故障排除。但问题是它只显示Catalyst App的控制台日志。如何在控制台中打印变量值?比如催化剂$ c-> log-> info($ variable value)。

1 个答案:

答案 0 :(得分:1)

使用prove运行测试时,需要添加-v标志以查看所有测试输出。

$ prove -v t/

这样就不会占用所有的TAP输出。

然后,您可以使用diag from Test::More将评论输出到TAP或the warn builtin

use Test::More;

pass 'first test';
diag 'this is a diagnostical message';

my $res = pass 'another test';
warn $res;

done_testing;

产生此输出(在Windows上):

$ prove -v foo.pl
foo.pl .. # this is a diagnostical message

1 at foo.pl line 7.
ok 1 - first test
ok 2 - another test
1..2
ok
All tests successful.
Files=1, Tests=2,  0 wallclock secs ( 0.02 usr +  0.02 sys =  0.03 CPU)
Result: PASS

但是,我通常做的是使用Data::Printerp函数,它也会像警告一样写入STDERR。它比Data :: Dumper更强大,并且可以很好地显示对象。来自p的调试输出也将在TAP中的某个地方结束。

如果应用程序正在进行大量日志记录,可能会感到困惑,因此关闭Catalyst日志是一种选择。为此,请在环境变量CATALYST_DEBUG设置为0的情况下运行测试。

$ CATALYST_DEBUG=0 prove -v t/

如果您希望调试输出来自测试进入Catalyst日志,则需要获取上下文。这有点棘手,但可能。

use Test::More
use Test::WWW::Mechanize::Catalyst;
use Catalyst::Test 'MyApp';
use Data::Printer;

my $mech = Test::WWW::Mechanize::Catalyst->new(catalyst_app => 'MyApp');

$mech->get_ok("/");

my($res, $c) = ctx_request('/');
$c->log->warn(np $res); # this will go to the Catalyst log

该代码同时使用Test::WWW::Mechanize::CatalystCatalyst::Test。如果您传递了相同的应用名称,则他们无法相互接触,只会启动一次应用。

我在Catalyst :: Test中展示了get_okctx_request函数的常规机械测试。它从该请求返回HTTP :: Response对象和上下文$c。您可以在上下文中运行->log,您的调试将转到Catalyst日志。我使用Data :: Printer中的np,它返回Data :: Printer生成的调试信息,而不是将其写入STDOUT,因此我可以将它放入Catalyst日志中。