【问题标题】:Why *STDERR in this perl test is empty?为什么这个 perl 测试中的 *STDERR 是空的?
【发布时间】:2018-03-15 09:51:19
【问题描述】:

我从 Mojolicious (mojo/log.t) 复制了以下代码块。 我正在测试的应用程序执行$app->log->warn('whatever');。 不幸的是,当我作为make test 的一部分运行测试时,STDERR 恰好是空的。当我用prove -lv t/basic.t 运行它时,它成功了。我的程序有什么问题。被测程序的完整源代码为here 谢谢!

my $buffer = '';
{
  open my $handle, '>', \$buffer;
  local *STDERR = $handle;
  require Blog;
  my $blog = Blog->new;
  $blog->startup();
}
like $buffer, qr/"routes" key must point to an ARRAY/,
  'right warning about ARRAY reference';

【问题讨论】:

    标签: perl testing stderr mojolicious


    【解决方案1】:

    [已编辑] 您可能需要将环境变量MOJO_LOG_LEVEL 设置为warn。 Mojo 检查日志记录级别的方式是,$ENV{MOJO_LOG_LEVEL}(如果使用 Test::Mojo,默认为fatal)优先于应用程序中设置的级别。

    我使用 7.59 版的 Mojolicious 来检查这些东西。

    【讨论】:

    • 但是日志已经是$app的一个属性了。我正在使用它。 ``` $app->log->warn( '"routes" 键必须指向一个数组引用 ' . '路由描述' . $file_msg . '...') `` github.com/kberov/Mojolicious-Plugin-RoutesConfig/blob/master/…
    • 是的,你是对的,我编辑了答案。考虑检查其他事项
    • 设置local $ENV{MOJO_LOG_LEVEL} = 'warn'; 完成了这项工作。谢谢你,wolfrevokcats!
    • 很高兴听到这个消息。我问过SUPER::Register,因为我自己修改了代码。我会从答案中删除它。
    • 一个重要的说明,它实际上解释了为什么需要设置 MOJO_LOG_LEVEL。我在 Mojo::Log 中找到源:$ENV{MOJO_LOG_LEVEL} ||= $ENV{HARNESS_IS_VERBOSE} ? 'debug' : 'fatal';
    猜你喜欢
    • 2021-12-12
    • 2013-06-08
    • 2012-07-06
    • 1970-01-01
    • 1970-01-01
    • 2021-06-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多