Pruebas en el código fuente
Vitest también ofrece la posibilidad de ejecutar pruebas directamente dentro del código fuente, junto con la implementación, de forma similar a las pruebas de módulo de Rust.
Esto permite que las pruebas compartan el mismo contexto que las implementaciones y puedan probar estados internos sin necesidad de exponerlos. Además, proporciona una retroalimentación más inmediata durante el desarrollo.
Configuración
Para empezar, añade un bloque if (import.meta.vitest)
al final de tu archivo fuente e incluye algunas pruebas dentro de este bloque. Por ejemplo:
// src/index.ts
// la implementación
export function add(...args: number[]) {
return args.reduce((a, b) => a + b, 0);
}
// conjunto de pruebas 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 dentro de src/
:
// vite.config.ts
import { defineConfig } from 'vitest/config';
export default defineConfig({
test: {
includeSource: ['src/**/*.{js,ts}'],
},
});
¡Ahora puedes empezar a ejecutar las pruebas!
$ npx vitest
Construcción para producción
Para la construcción para producción, es necesario configurar la opción define
en el archivo de configuración, permitiendo que el empaquetador elimine el código no utilizado. Por ejemplo, en Vite:
// vite.config.ts
import { defineConfig } from 'vitest/config'
export default defineConfig({
+ define: {
+ 'import.meta.vitest': 'undefined',
+ },
test: {
includeSource: ['src/**/*.{js,ts}']
},
})
Otros empaquetadores
unbuild
// build.config.ts
import { defineBuildConfig } from 'unbuild'
export default defineBuildConfig({
+ replace: {
+ 'import.meta.vitest': 'undefined',
+ },
// other options
})
Más información en: unbuild
rollup
// rollup.config.js
+ import replace from '@rollup/plugin-replace'
export default {
plugins: [
+ replace({
+ 'import.meta.vitest': 'undefined',
+ })
],
// other options
}
Más información: rollup
TypeScript
Para habilitar el soporte de TypeScript para import.meta.vitest
, añade vitest/importMeta
a tu tsconfig.json
:
// tsconfig.json
{
"compilerOptions": {
"types": [
+ "vitest/importMeta"
]
}
}
Consulta test/import-meta
para ver un ejemplo completo.
Notas
Esta característica puede ser útil para:
- Pruebas unitarias de funciones o utilidades de alcance limitado.
- Prototipado.
- Aserciones en línea.
Se recomienda utilizar archivos de prueba separados para pruebas más complejas, como pruebas de componentes o pruebas E2E.