/ / Usando TAP :: Formatter :: JUnit com testes de Mojolicious? - perl, testing, mojolicious

Usando TAP :: Formatter :: JUnit com testes de Mojolicious? - perl, testando, mojolicious

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 № 1

Eu 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.