Eu tenho vários testes para meu aplicativo Mojolicious e tudo funciona bem, e agora estou tentando fazer com que o Mojolicious produza no JUnit XML. TAP::Formatter::JUnit
que parece exatamente o que eu quero, mas não estou entendendo como fazer os testes de Mojolicious (executados apenas script/site.pl test
do nível raiz do meu aplicativo) para usar isso.
Estou sentindo falta de algo cego óbvio ou não consigo usar a funcionalidade de teste interna Mojolicious "se quiser que ela seja transmitida para o JUnit XML?
Respostas:
2 para resposta № 1Eu olhei para Mojolicious :: Command :: test e está usando Test::Harness
para executar o conjunto de testes. O módulo está sobre o invólucro TAP::Harness
, de quem formatter
parâmetro que precisamos definir. Não encontrei nenhuma maneira de enviar o parâmetro (existem variáveis de ambiente como HARNESS_OPTIONS
, mas eles não permitiram o parâmetro).
O que você pode fazer é implementar novo comando para seu aplicativo. Criei um novo aplicativo Mojolicious, adicionei um novo namespace de comando conforme o guia acima na inicialização do aplicativo:
push @{$self->commands->namespaces}, "JUnitTest::Command";
Então eu apenas copiei Mojolicious::Command::test
para dentro JUnit::Command::testjunit
e substituiu as últimas linhas de run
método:
$ENV{HARNESS_OPTIONS} //= "c";
require Test::Harness;
Test::Harness::runtests(sort @args);
com
require TAP::Harness;
my $harness = TAP::Harness->new({
formatter_class => "TAP::Formatter::JUnit",
lib => @INC,
merge => 1,
});
$harness->runtests(sort @args);
Executando-o como
perl script/junit_test testjunit
resultou nesta saída:
<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>
Espero que isto ajude.