Jest: Executar `jest-cli` global deve avisar em vez de erro

Criado em 14 jul. 2016  ·  3Comentários  ·  Fonte: facebook/jest

A chamada process.exit(1) disparada durante a execução de uma versão instalada globalmente do Jest resulta em resultados de teste estranhos - mesmo quando todos os testes passam, o processo retorna um código de saída diferente de zero e não fica imediatamente claro o porquê.

Quando jest é atribuído a npm test (que é uma convenção bastante comum), você obtém:

Please run `npm install` to use the version of Jest intended for this project.
...
163 tests passed (163 total in 30 test suites, run time 3.292s)
npm ERR! Test failed.  See above for more details.

Não há detalhes óbvios (a linha "Execute ..." não parece uma mensagem de erro ") e nenhum teste com falha, portanto, a depuração é complicada.

Recomendações

  1. Eu preferiria remover o teste para uma versão local do pacote de Jest de getJest inteiramente. Se as pessoas quiserem usar uma versão não local do Jest sem executar npm install , não tenho certeza de por que o pacote deveria se importar?
  2. Se o teste for útil o suficiente para permanecer, ele deve usar console.warn sem afetar o código de saída porque os testes ainda podem ser executados sem problemas e o aviso é uma indicação suficiente de que a saída pode não refletir exatamente o que o usuário pretendia.
  3. Se retornar um código de saída diferente de zero for preferível, o teste deve lançar um Error real para tornar a depuração mais fácil - o tratamento de erros embutido do Node é muito mais explícito do que console.error seguido por process.exit(1) .
  4. Se você realmente não quiser lançar um erro, chame process.exit(1) imediatamente em vez de esperar que todos os testes sejam executados - se não for correto executar o Jest globalmente quando houver uma dependência definida localmente ausente, então deveria não corre de todo.

Comentários muito úteis

@mmcgahan @cpojer Estou vendo este erro não fatal ao executar o Jest dentro de um pacote filho em um monorepo de espaços de trabalho do yarn. Parece que está sendo mostrado um erro porque a maneira como você procura jest não está lidando com pacotes sendo içados até a raiz do monorepo?

Todos 3 comentários

Obrigado por trazer isso à tona e pela descrição detalhada do problema. Para ser honesto, eu também fiquei chateado com essas coisas e isso definitivamente torna o conjunto de testes de Jest um pouco mais difícil de lidar.

Também concordo que a maneira como isso está funcionando atualmente não faz nenhum sentido se Jest ainda acabar executando testes de qualquer maneira. Lamento que você tenha perdido tempo com isso.

Você estaria disposto a enviar uma solicitação de pull?

Minha sugestão é a seguinte:

  • Remova process.exit(1) .
  • Faça process.on('exit', () => console.log(chalk.red('The error message '))) para que recebamos uma bela mensagem em vermelho no final de uma execução de teste informando que algo não está como deveria.

Isso permitirá que as pessoas usem a versão errada do Jest (o que não é recomendado, porque pode haver alterações importantes), mas ainda assim terminará a execução do teste corretamente e imprimirá uma mensagem na parte inferior. O que você acha?

@cpojer Isso funciona para mim, obrigado pela resposta rápida! Apresentarei o PR em breve

@mmcgahan @cpojer Estou vendo este erro não fatal ao executar o Jest dentro de um pacote filho em um monorepo de espaços de trabalho do yarn. Parece que está sendo mostrado um erro porque a maneira como você procura jest não está lidando com pacotes sendo içados até a raiz do monorepo?

Esta página foi útil?
0 / 5 - 0 avaliações