Testes no Código-Fonte
O Vitest oferece a capacidade de executar testes diretamente no seu código-fonte, junto com a implementação, de forma semelhante aos testes de módulo do Rust.
Essa abordagem 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 ágil durante o desenvolvimento.
WARNING
Este guia explica como escrever testes dentro do seu código-fonte. Se você precisa escrever testes em arquivos de teste separados, consulte o guia "Escrevendo Testes" (Writing Tests
).
Configuração
Para começar, insira um bloco if (import.meta.vitest)
no final do seu arquivo de origem e escreva seus testes dentro dele. Por exemplo:
// a implementação
export function add(...args: number[]) {
return args.reduce((a, b) => a + b, 0);
}
// conjuntos de teste 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
para que o Vitest inclua os arquivos em src/
:
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 empacotador (bundler) realize a eliminação de código morto (dead code elimination). Por exemplo, no Vite:
/// <reference types="vitest/config" />
import { defineConfig } from 'vite'
export default defineConfig({
test: {
includeSource: ['src/**/*.{js,ts}'],
},
define: {
'import.meta.vitest': 'undefined',
},
})
Outros Empacotadores
unbuild
import { defineBuildConfig } from 'unbuild'
export default defineBuildConfig({
replace: {
'import.meta.vitest': 'undefined',
},
// other options
})
Saiba mais: unbuild
Rollup
import replace from '@rollup/plugin-replace'
export default {
plugins: [
replace({
'import.meta.vitest': 'undefined',
})
],
// other options
}
Saiba mais: Rollup
TypeScript
Para obter suporte TypeScript para import.meta.vitest
, adicione vitest/importMeta
ao seu tsconfig.json
:
{
"compilerOptions": {
"types": [
"vitest/importMeta"
]
}
}
Consulte o exemplo completo em examples/in-source-test
.
Observações
Este recurso pode ser útil para:
- Testes de unidade para funções ou utilitários de escopo limitado
- Prototipagem
- Asserções inline
É recomendado usar arquivos de teste separados para testes mais complexos, como componentes ou testes E2E.