Errores Comunes
No se puede encontrar el módulo './ruta-relativa'
Si recibes un error indicando que no se puede encontrar el módulo, esto puede deberse a varias razones:
- Has escrito mal la ruta. Asegúrate de que la ruta sea correcta.
- Es posible que dependas de
baseUrl
en tutsconfig.json
. Vite no consideratsconfig.json
por defecto, por lo que podrías necesitar instalarvite-tsconfig-paths
si dependes de este comportamiento.
- Es posible que dependas de
import { defineConfig } from 'vitest/config';
import tsconfigPaths from 'vite-tsconfig-paths';
export default defineConfig({
plugins: [tsconfigPaths()],
});
O reescribe la ruta para que no sea relativa a la raíz del proyecto:
- import helpers from 'src/helpers'
+ import helpers from '../src/helpers'
- Asegúrate de no tener alias relativos. Vite los trata como relativos al archivo donde se realiza la importación, en lugar de la raíz del proyecto.
import { defineConfig } from 'vitest/config';
export default defineConfig({
test: {
alias: {
'@/': './src/',
'@/': new URL('./src/', import.meta.url).pathname,
},
},
});
No se puede hacer mock de "./mocked-file.js" porque ya está cargado
Este error ocurre cuando el método vi.mock
se invoca en un módulo que ya ha sido cargado. Vitest lanza este error porque dicha llamada no tendrá efecto, ya que se prefieren los módulos en caché.
Recuerda que vi.mock
siempre se eleva (hoisted), lo que significa que el módulo se cargó antes de que el archivo de prueba comenzara a ejecutarse, muy probablemente en un archivo de configuración (setup file). Para corregir el error, elimina la importación o borra la caché al final de un archivo de configuración. Ten en cuenta que, en ese caso, el archivo de configuración y tu archivo de prueba harán referencia a módulos diferentes.
// setupFile.js
import { vi } from 'vitest';
import { sideEffect } from './mocked-file.js';
sideEffect();
vi.resetModules();
Fallo al terminar el worker
Este error puede ocurrir cuando se utiliza fetch
de NodeJS con el pool: 'threads'
predeterminado. Este problema se está rastreando en el issue Timeout abort can leave process(es) running in the background #3077.
Como solución alternativa, puedes cambiar a pool: 'forks'
o pool: 'vmForks'
.
import { defineConfig } from 'vitest/config';
export default defineConfig({
test: {
pool: 'forks',
},
});
vitest --pool=forks
Fallos de segmentación y errores de código nativo
La ejecución de módulos nativos de NodeJS en pool: 'threads'
puede generar errores crípticos derivados del código nativo.
Segmentation fault (core dumped)
thread '<unnamed>' panicked at 'assertion failed
Abort trap: 6
internal error: entered unreachable code
En estos casos, es probable que el módulo nativo no esté diseñado para ser seguro en entornos multihilo. Como solución alternativa, puedes cambiar a pool: 'forks'
, que ejecuta los casos de prueba en múltiples node:child_process
en lugar de múltiples node:worker_threads
.
import { defineConfig } from 'vitest/config';
export default defineConfig({
test: {
pool: 'forks',
},
});
vitest --pool=forks