Eu sempre usei o Jasmine para meus testes de unidade, mas recentemente comecei a usar Istambul para me fornecer relatórios de cobertura de código. Quer dizer, eu obter a essência do que eles estão tentando me dizer, mas eu realmente não sei o que cada uma destas percentagens representam (stmts, Ramos, Funcs, linhas). Até agora, pesquisando no Google, não consegui encontrar uma explicação / recurso sólido.
Pergunta : Como eu disse, entendi a essência, mas alguém pode postar uma explicação adequada ou um link para uma explicação adequada?
Pergunta terciária : Existe alguma maneira de identificar quais partes específicas do seu código não são cobertas? Até agora, sem realmente reclamar deste relatório, estou basicamente supondo.
-------------------|-----------|-----------|-----------|-----------|
File | % Stmts |% Branches | % Funcs | % Lines |
-------------------|-----------|-----------|-----------|-----------|
controllers/ | 88.1 | 77.78 | 78.57 | 88.1 |
dashboard.js | 88.1 | 77.78 | 78.57 | 88.1 |
-------------------|-----------|-----------|-----------|-----------|
All files | 88.1 | 77.78 | 78.57 | 88.1 |
-------------------|-----------|-----------|-----------|-----------|
javascript
testing
jasmine
code-coverage
istanbul
Scott Sword
fonte
fonte
Respostas:
Existem vários critérios de cobertura, sendo os principais:
Para cada caso, a porcentagem representa código executado versus código não executado , que é igual a cada fração no formato percentual (por exemplo: 50% ramificações, 1/2).
No relatório do arquivo:
'E'
significa 'else path not taken', o que significa que, para a instrução if / else marcada, o caminho 'if' foi testado, mas não o 'else'.'I'
significa 'se o caminho não for seguido', que é o caso oposto: o 'se' não foi testado.xN
coluna da esquerda é a quantidade de vezes que a linha foi executada.Isso foi verificado no Istanbul v0.4.0, não tenho certeza se isso ainda se aplica às versões subseqüentes, mas, como a biblioteca é baseada em princípios teóricos sólidos, o comportamento não deve mudar muito para as versões mais recentes.
Ele também fornece alguns códigos de cores -
Rosa : declarações não cobertas.
Laranja : funções não cobertas.
Amarelo : galhos não cobertos.
Documentos completos de Istambul aqui:
https://istanbul.js.org
Para uma teoria mais aprofundada sobre cobertura de código:
https://en.wikipedia.org/wiki/Code_coverage
Espero que ajude!
fonte
A execução de Istambul também deve produzir um arquivo HTML para o relatório (deve estar na pasta de cobertura). Esse HTML deve fornecer informações detalhadas quando você clica em arquivos / pastas.
A porcentagem de funções cobertas é calculada pelo número de funções chamadas durante os testes, dividido pelo número total de funções. O mesmo vale para linhas e declarações (que geralmente estarão próximas umas das outras, a menos que você tenha declarações muito longas). Ramos significam pontos de decisão como
if-else
blocos. Por exemplo, digamos que seu código contenha apenas umaif-else
instrução e seus testes passem apenas pelaif
parte, mas não pelaelse
parte, a porcentagem de suas ramificações deve ser de 50%.Espero que isso torne as coisas mais claras.
fonte
"test" : "nyc mocha"
nopackage.json
. Minha pasta de cobertura está em branco. Pensamentos?"test" : "nyc --reporter=html mocha"
Adicionando às respostas anteriores
As% Declarações são calculadas considerando uma porcentagem do número de declarações cobertas pelo seu teste, por exemplo, 12/18 * 100 = 66,67%. Isso significa que seu teste cobriu apenas 66,67%.
A% Ramificação também é calculada da mesma maneira. O mesmo para% Functions e% lines.
No diretório raiz do projeto, há uma pasta de cobertura que contém a saída HTML do seu teste. Clique nele e visualize-o no navegador. Você deve ver algo assim
Imagem mostrando a saída dos resultados do teste
Espero que isso ajude você a entender melhor.
fonte