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
import { defineConfig } from 'vitest/config';
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
import { defineConfig } from 'vitest/config'
export default defineConfig({
+ define: {
+ 'import.meta.vitest': 'undefined',
+ },
test: {
includeSource: ['src/**/*.{js,ts}']
},
})
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.