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
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?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.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)
.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.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:
process.exit(1)
.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?
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?