Cobertura
O Vitest oferece suporte integrado à cobertura de código (via v8) através do v8
e à cobertura de código instrumentada via istanbul
.
Provedores de Cobertura
TIP
Disponível a partir do Vitest v0.22.0
O suporte a v8
e istanbul
é opcional. Por padrão, o v8
será utilizado.
Você pode selecionar a ferramenta de cobertura definindo test.coverage.provider
para v8
ou istanbul
:
// vite.config.ts
import { defineConfig } from 'vitest/config';
export default defineConfig({
test: {
coverage: {
provider: 'istanbul', // ou 'v8'
},
},
});
Ao iniciar o Vitest, o sistema solicitará a instalação automática do pacote de suporte correspondente.
Ou, se preferir instalá-los manualmente:
# Para v8
npm i -D @vitest/coverage-v8
# Para istanbul
npm i -D @vitest/coverage-istanbul
Configuração da Cobertura
Para habilitar a cobertura durante os testes, utilize a flag --coverage
na CLI. Por padrão, o reporter utilizado será ['text', 'html', 'clover', 'json']
.
{
"scripts": {
"test": "vitest",
"coverage": "vitest run --coverage"
}
}
Para configurar as opções de cobertura, defina a propriedade test.coverage
no seu arquivo de configuração:
// vite.config.ts
import { defineConfig } from 'vitest/config';
export default defineConfig({
test: {
coverage: {
reporter: ['text', 'json', 'html'],
},
},
});
Provedor de Cobertura Personalizado
Também é possível fornecer um provedor de cobertura personalizado definindo test.coverage.provider
para 'custom'
:
// vite.config.ts
import { defineConfig } from 'vitest/config';
export default defineConfig({
test: {
coverage: {
provider: 'custom',
customProviderModule: 'my-custom-coverage-provider',
},
},
});
Provedores personalizados requerem a opção customProviderModule
, que especifica o nome do módulo ou o caminho para carregar o CoverageProviderModule
. Este módulo deve exportar um objeto que implementa a interface CoverageProviderModule
como exportação padrão:
// my-custom-coverage-provider.ts
import type {
CoverageProvider,
CoverageProviderModule,
ResolvedCoverageOptions,
Vitest,
} from 'vitest';
const CustomCoverageProviderModule: CoverageProviderModule = {
getProvider(): CoverageProvider {
return new CustomCoverageProvider();
},
// Implementa o restante de CoverageProviderModule ...
};
class CustomCoverageProvider implements CoverageProvider {
name = 'custom-coverage-provider';
options!: ResolvedCoverageOptions;
initialize(ctx: Vitest) {
this.options = ctx.config.coverage;
}
// Implementa o restante de CoverageProvider ...
}
export default CustomCoverageProviderModule;
Por favor, consulte a definição de tipo para mais detalhes.
Alterando o local padrão da pasta de cobertura
Ao gerar um relatório de cobertura, uma pasta coverage
é criada no diretório raiz do seu projeto. Se você deseja movê-la para um diretório diferente, use a propriedade test.coverage.reportsDirectory
no arquivo vite.config.js
.
import { defineConfig } from 'vite';
export default defineConfig({
test: {
coverage: {
reportsDirectory: './tests/unit/coverage',
},
},
});
Ignorando código
Ambos os provedores de cobertura possuem suas próprias maneiras de ignorar código dos relatórios de cobertura:
Ao usar o TypeScript, os códigos-fonte são transpilados usando esbuild
, que remove todos os comentários dos códigos-fonte (esbuild#516). Comentários que são considerados comentários legais são preservados.
Para o provedor istanbul
, você pode incluir a palavra-chave @preserve
na dica de ignorar. Tenha em mente que essas marcações para ignorar podem ser incluídas na versão final de produção.
-/* istanbul ignore if */
+/* istanbul ignore if -- @preserve */
if (condition) {
Para v8
, isso não causa nenhum problema. Você pode usar comentários c8 ignore
com Typescript como de costume:
/* c8 ignore next 3 */
if (condition) {
Outras opções
Para ver todas as opções de configuração disponíveis para cobertura, consulte a Referência de Configuração de Cobertura.
Vitest UI
A partir do Vitest 0.31.0, você pode verificar seu relatório de cobertura na Vitest UI.
A interface do Vitest exibirá o relatório de cobertura se a funcionalidade estiver habilitada e o reporter HTML estiver presente. Caso contrário, o relatório não estará disponível.
- Habilite
coverage.enabled=true
na sua configuração ou execute o Vitest com a flag--coverage.enabled=true
. - Adicione
html
à listacoverage.reporters
. Opcionalmente, habilite a opçãosubdir
para salvar o relatório de cobertura em um subdiretório.



