Testes no Código Fonte
O Vitest oferece uma maneira de executar testes diretamente no seu código fonte, junto à implementação, similar aos testes de módulo do Rust.
Isso permite que os testes compartilhem o mesmo escopo das implementações, possibilitando testar estados privados sem a necessidade de exportá-los. Além disso, proporciona um ciclo de feedback mais rápido durante o desenvolvimento.
Configuração
Para começar, adicione um bloco if (import.meta.vitest)
ao final do seu arquivo de código fonte e escreva alguns testes dentro dele. Por exemplo:
// src/index.ts
// a implementação
export function add(...args: number[]) {
return args.reduce((a, b) => a + b, 0);
}
// suítes de testes no código fonte
if (import.meta.vitest) {
const { it, expect } = import.meta.vitest;
it('add', () => {
expect(add()).toBe(0);
expect(add(1)).toBe(1);
expect(add(1, 2, 3)).toBe(6);
});
}
Atualize a configuração includeSource
do Vitest para incluir os arquivos em src/
:
// vite.config.ts
/// <reference types="vitest" />
import { defineConfig } from 'vite';
export default defineConfig({
test: {
includeSource: ['src/**/*.{js,ts}'],
},
});
Agora você pode começar a testar!
$ npx vitest
Compilação para Produção
Para a compilação de produção, você precisará definir as opções define
no seu arquivo de configuração, permitindo que o bundler realize a eliminação de código morto (dead code elimination). Por exemplo, no Vite:
// vite.config.ts
/// <reference types="vitest" />
import { defineConfig } from 'vite';
export default defineConfig({
test: {
includeSource: ['src/**/*.{js,ts}'],
},
define: {
'import.meta.vitest': 'undefined',
},
});
Outros Bundlers
unbuild
// build.config.ts
import { defineBuildConfig } from 'unbuild';
export default defineBuildConfig({
replace: {
'import.meta.vitest': 'undefined',
},
// other options
});
Saiba mais sobre: unbuild
rollup
// rollup.config.js
import replace from '@rollup/plugin-replace';
export default {
plugins: [
replace({
'import.meta.vitest': 'undefined',
}),
],
// other options
};
Saiba mais sobre: Rollup
TypeScript
Para obter suporte do TypeScript para import.meta.vitest
, adicione vitest/importMeta
ao array types
no seu tsconfig.json
:
// tsconfig.json
{
"compilerOptions": {
"types": [
"vitest/importMeta"
]
}
}
Veja test/import-meta
para um exemplo completo.
Notas
Este recurso pode ser útil para:
- Testes unitários de funções ou utilitários de escopo pequeno
- Criação de protótipos
- Asserções inline
Recomenda-se utilizar arquivos de teste separados para testes mais complexos, como testes de componentes ou E2E.