【问题标题】:Using TAP::Formatter::JUnit with Mojolicious tests?将 TAP::Formatter::JUnit 与 Mojolicious 测试一起使用?
【发布时间】:2013-02-17 05:27:21
【问题描述】:

我对我的 Mojolicious 应用程序进行了许多测试,并且一切正常,现在我正试图让 Mojolicious 输出到 JUnit XML。我发现 TAP::Formatter::JUnit 看起来正是我想要的,但我不知道如何让 Mojolicious 测试(仅由我的应用程序的根级别的 script/site.pl test 运行)来使用它。

我是否遗漏了一些显而易见的东西,或者如果我想将 Mojolicious 的内置测试功能输出到 JUnit XML,我无法使用它?

【问题讨论】:

    标签: perl testing mojolicious


    【解决方案1】:

    我查看了Mojolicious::Command::test,它正在使用Test::Harness 运行测试套件。该模块是TAP::Harness 的包装器,我们需要设置其formatter 参数。我还没有找到任何方法来推动参数(有像HARNESS_OPTIONS 这样的环境变量,但它们不允许参数)。

    你可以做的是实现new command for your application。我创建了新的 Mojolicious 应用程序,在应用程序启动时按照上面的指南添加了新的命令命名空间:

    push @{$self->commands->namespaces}, 'JUnitTest::Command';
    

    然后我只是将Mojolicious::Command::test 复制到JUnit::Command::testjunit 并替换了run 方法的最后几行:

    $ENV{HARNESS_OPTIONS} //= 'c';
    require Test::Harness;
    Test::Harness::runtests(sort @args);
    

    require TAP::Harness;
    my $harness = TAP::Harness->new({
      formatter_class => 'TAP::Formatter::JUnit',
      lib   => \@INC,
      merge => 1,
    });
    $harness->runtests(sort @args);
    

    运行它

    perl script/junit_test testjunit
    

    导致这个输出:

    <testsuites>
      <testsuite failures="0" errors="0" tests="3" name="t_basic_t">
        <testcase name="1 - get /"></testcase>
        <testcase name="2 - 200 OK"></testcase>
        <testcase name="3 - content is similar"></testcase>
        <system-out><![CDATA[1..3
    ok 1 - get /
    ok 2 - 200 OK
    ok 3 - content is similar
    ]]></system-out>
        <system-err></system-err>
      </testsuite>
    </testsuites>
    

    希望这会有所帮助。

    【讨论】:

    • 提出了一个问题here 以便能够指定格式化程序。
    • @VirtualWolf - 很高兴这有帮助。提出问题可能会导致测试命令的改进,因此我们可以毫不费力地使用替代格式化程序。
    猜你喜欢
    • 2015-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-01
    • 2021-03-21
    • 1970-01-01
    • 1970-01-01
    • 2017-07-04
    相关资源
    最近更新 更多