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

标签 perl testing catalyst

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

最佳答案

当您使用 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 日志中。

关于perl - 无法在 Perl Catalyst 应用程序中使用 Test::WWW::Mechanize::Catalyst 在测试用例中打印变量/哈希,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40690531/

相关文章:

perl - 如何在我的应用程序中动态更改 Maketext 词典?

perl - Catalyst MVC 使用单个表单保存多个对象

perl、libxml、xpath : how to get an element through an attribute in this example . xml 文件

.net - 可以从 PERL 的 .NET 中创建的 DLL 调用方法吗?

testing - Capybara 请求规范 DSL 和交易固定装置

java - 如何测试Spring Boot优雅关闭?

c++ - 使用正则表达式的条件组匹配

string - 如何快速计算字符串中连续单个字符的最大数量?

testing - 如何使用带有 react-apollo 的模拟数据进行测试

Perl Catalyst 和 FastCgi 错误记录问题