使用TAP :: Formatter :: JUnit进行Mojolicious测试?

时间:2013-02-17 05:27:21

标签: perl testing mojolicious

我的Mojolicious应用程序有很多测试,一切正常,现在我想让Mojolicious输出到JUnit XML。我发现TAP::Formatter::JUnit看起来就像我想要的那样,但是我没有抓住如何从我的应用程序的根级别获得Mojolicious测试(仅由script/site.pl test运行)来使用它

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

1 个答案:

答案 0 :(得分:2)

我查看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>

希望这有帮助。