Cobertura de código para Jest

131

Existe uma maneira de obter cobertura de código na estrutura de teste Javascript Jest, construída sobre o Jasmine?

A estrutura interna não imprime a cobertura de código obtida. Eu também tentei usar Istambul , cobertor e JSCover , mas nenhum deles funciona.

Alex Palcuie
fonte
Eu não gosto muito de brincadeiras, mas você já viu config.collectCoverage ?
Ciro Costa

Respostas:

123

Ao usar o Jest 21.2.1 , posso ver a cobertura do código na linha de comando e criar um diretório de cobertura passando --coveragepara o script Jest. Abaixo estão alguns exemplos:

Tendo a instalar o Jest localmente, nesse caso, o comando pode ser assim:

npx jest --coverage

Presumo (embora não tenha confirmado), que isso também funcionaria se eu instalasse o Jest globalmente:

jest --coverage

Os documentos muito esparsos estão aqui

Quando naveguei no diretório de cobertura / lcov-report , encontrei um arquivo index.html que poderia ser carregado em um navegador. Ele incluía as informações impressas na linha de comando, além de informações adicionais e alguma saída gráfica.

ccalvert
fonte
7
Nunca use módulos globais. Para garantir a consistência da versão e a presença do pacote, sempre use o executável no node_modulesvia ./node_modules/.bin/jest --coverage. Desde que o pacote seja nomeado em package.json, você pode garantir a execução com a versão exata do jest que você espera.
taystack
Como obter cobertura de gracejo apenas para arquivos alterados?
Shanika Ediriweera 27/11/19
Existe uma maneira fácil de reprovar nos testes se a cobertura estiver abaixo de um determinado limite? Pergunta SO correspondente: stackoverflow.com/questions/60512167/…
Stefan
@ShanikaEdiriweera jestjs.io/docs/en/cli.html#--collectcoveragefromglob
marcellothearcane
88

ATUALIZAÇÃO: 20/07/2018 - Links adicionados e nome atualizado para a cobertura

ATUALIZAÇÃO: 14/8/2017 - Esta resposta está totalmente desatualizada. Basta olhar para os documentos do Jest agora. Eles têm suporte e documentação oficiais sobre como fazer isso.

@hankhsiao tem um repositório bifurcado onde Istambul está trabalhando com Jest. Adicione isso às suas dependências de desenvolvimento

 "devDependencies": {
     "jest-cli": "git://github.com/hankhsiao/jest.git"
 }

Verifique também se a cobertura está ativada na entrada do package.json jest e também é possível especificar os formatos desejados. (O html é muito ruim).

 "jest": {
     "collectCoverage": true,
     "coverageReporters": ["json", "html"],
 }

Consulte a documentação do Jest para obter coberturaReporters (o padrão é ["json", "lcov", "text"])

Ou adicione --coveragequando você chamar brincadeira.

Adrian Adkison
fonte
1
A opção de coberturaFormats foi removida - parece que json e html são sempre gerados.
1
Eu uso a opção --coverage, mas absolutamente nada de diferente acontece.
gbbr
3
É (agora) chamado coverageReporterse o padrão é ["json", "lcov", "text"]. Veja facebook.github.io/jest/docs/…
Karsten S.
não funciona, foi encontrada a opção desconhecida "CoverFormats" com o valor ["json", "html"].
srghma
40

Jan 2019: Versão Jest 23.6

Para quem está estudando essa questão recentemente, especialmente se estiver testando usando npmou yarndiretamente

Atualmente, você não precisa alterar as opções de configuração

De acordo com o site oficial de brincadeira , você pode fazer o seguinte para gerar relatórios de cobertura:

1- Para npm:

Você deve colocar -- antes de passar o --coverageargumento de brincadeira

npm test -- --coverage

se você tentar invocar o --coveragediretamente sem o --não vai funcionar

2- Para fios:

Você pode passar o --coverageargumento de brincadeira diretamente

yarn test --coverage
Ahmed Elkoussy
fonte
1
Como obter cobertura de gracejo apenas para arquivos alterados?
Shanika Ediriweera 27/11/19
Mudou desde quando? Você provavelmente deseja usar a --watchconfiguração para isso.
koehn 17/03
1
Essa resposta faz muitas suposições sobre o estado delas package.json.
airtonix 06/06
6

Tudo bem, ignore minha resposta anterior, pois alguém me disse que isso não resolveu o problema.

Nova resposta:

1) Verifique o mais recente gracejo (v 0.22): https://github.com/facebook/jest

2) A equipe do facebook coloca Istambul como parte do relatório de cobertura e você pode usá-lo diretamente.

3) Após executar o jest, você pode obter o relatório de cobertura no console e, na pasta raiz definida pelo jest, você encontrará o relatório de cobertura nos formatos json e html.

4) Para sua informação, se você instalar a partir do npm, poderá não obter a versão mais recente; então tente o github primeiro e verifique se a cobertura é o que você precisa.


Resposta antiga:

Também tenho o mesmo problema. Resposta curta é: Istanbule JestNÃO estão trabalhando juntos.

Verifique as seguintes páginas para maiores detalhes:

https://github.com/facebook/jest/issues/101

O jest usa o contextify, que executa scripts JS em um contexto V8 no código nativo, ignorando todos os ganchos require e vm.runInThisContext de istambul. Portanto, a cobertura do istanbul não funcionará, pois as funções node.js padrão que podem ser conectadas com o gancho não estão sendo usadas e os arquivos de pré-instrumentação também não ajudarão, pois todos os testes são executados em sua própria caixa de proteção e não há um global para esconder o objeto de cobertura.

@ Costa Costa: config.collectCoverageNÃO está funcionando, pois é uma função 'TODO'. Por favor, verifique o código fonte.

Winters
fonte
A questão era como obter cobertura de código para o Jest. Que Istambul e Jest não trabalhem juntos pode ser verdade, mas isso não responde à pergunta.
David Raab #
0

Se você está tendo problemas com o --coverage não está funcionando, também pode ser devido à cobertura dos Reporters ativados sem a adição de 'texto' ou 'resumo de texto'. Na documentação: "Observação: a configuração desta opção substitui os valores padrão. Adicione" texto "ou" resumo de texto "para ver um resumo de cobertura na saída do console." Fonte

thebkr7
fonte
0

Configure seu arquivo package.json

"test": "gracejo - cobertura",

insira a descrição da imagem aqui

Agora execute:

yarn test

Todo o teste começará a ser executado e você receberá o relatório. insira a descrição da imagem aqui

Saif Siddiqui
fonte
-1

Eu tive o mesmo problema e o corrigi como abaixo.

  1. instalar fios npm install --save-dev yarn
  2. instalar jest-cli npm install --save-dev jest-cli
  3. adicione isso ao package.json "jest-coverage": "yarn run jest -- --coverage"

Depois de escrever os testes, execute o comando npm run jest-cover. Isso criará uma pasta de cobertura no diretório raiz. /coverage/icov-report/index.html possui a visualização html da cobertura do código.

Feliz codificação!

Laksh
fonte
8
Não há necessidade de instalar fios. Yarn é apenas gerenciador de pacotes diferentes para NPM
Preto
-10

Experimente Chutzpah . Acabei de usá-lo. E eu escrevi sobre como integrar no Visual Studio.

Foi assim que codifiquei a cobertura com Chutzpah: http://francorobles.wordpress.com/2014/09/14/code-coverage-with-chutzpah/

francorobles
fonte
O Chutzpath é construído sobre o Blanket e especifiquei acima que o Jest não funciona com ele.
Alex Palcuie
Interessante porque o meu apenas funcionou. francorobles.wordpress.com/2014/09/14/…
francorobles
1
Você não está usando o Jest, que por padrão zomba de todos require.
Alex Palcuie 14/09/14