Pruebas en el código fuente
Vitest ofrece la capacidad de ejecutar pruebas directamente dentro de tu código fuente, junto a la implementación, de manera similar a las pruebas de módulo de Rust.
Este enfoque permite que las pruebas compartan el mismo ámbito (closure) que las implementaciones, facilitando la prueba de estados privados sin necesidad de exportarlos. Además, proporciona un ciclo de retroalimentación más rápido durante el desarrollo.
WARNING
Esta guía detalla cómo escribir pruebas dentro de tu código fuente. Si necesitas escribir pruebas en archivos de prueba separados, consulta la guía "Escribir pruebas".
Configuración
Para comenzar, inserta un bloque if (import.meta.vitest)
al final de tu archivo fuente y escribe tus pruebas dentro de él. Por ejemplo:
// la implementación
export function add(...args: number[]) {
return args.reduce((a, b) => a + b, 0);
}
// suites de prueba en el código fuente
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);
});
}
Actualiza la configuración includeSource
para que Vitest incluya los archivos de src/
:
import { defineConfig } from 'vitest/config';
export default defineConfig({
test: {
includeSource: ['src/**/*.{js,ts}'],
},
});
¡Con esto, ya puedes empezar a ejecutar tus pruebas!
$ npx vitest
Compilación de producción
Para la compilación de producción, es necesario configurar las opciones define
en tu archivo de configuración, lo que permitirá al empaquetador eliminar el código de prueba no utilizado. Por ejemplo, en Vite:
/// <reference types="vitest/config" />
import { defineConfig } from 'vite'
export default defineConfig({
test: {
includeSource: ['src/**/*.{js,ts}'],
},
define: {
'import.meta.vitest': 'undefined',
},
})
Otros empaquetadores
unbuild
import { defineBuildConfig } from 'unbuild'
export default defineBuildConfig({
replace: {
'import.meta.vitest': 'undefined',
},
// other options
})
Más información: unbuild
Rollup
import replace from '@rollup/plugin-replace'
export default {
plugins: [
replace({
'import.meta.vitest': 'undefined',
})
],
// other options
}
Más información: Rollup
TypeScript
Para obtener soporte de TypeScript para import.meta.vitest
, añade vitest/importMeta
a tu tsconfig.json
:
{
"compilerOptions": {
"types": [
"vitest/importMeta"
]
}
}
Para ver el ejemplo completo, consulta examples/in-source-test
.
Notas
Esta característica puede ser particularmente útil para:
- Pruebas unitarias de funciones o utilidades de ámbito reducido.
- Prototipado.
- Aserciones en línea.
Se recomienda utilizar archivos de prueba separados para pruebas más complejas, como las de componentes o las pruebas E2E.