Errori Comuni
Impossibile trovare il modulo './relative-path'
Se ricevi un errore che indica che il modulo non può essere trovato, le cause potrebbero essere diverse:
- Hai scritto male il percorso. Assicurati che il percorso sia corretto.
- Stai utilizzando
baseUrl
nel tuotsconfig.json
. Vite non consideratsconfig.json
di default, quindi potresti dover installarevite-tsconfig-paths
se dipendi da questo comportamento.
- Stai utilizzando
import { defineConfig } from 'vitest/config';
import tsconfigPaths from 'vite-tsconfig-paths';
export default defineConfig({
plugins: [tsconfigPaths()],
});
In alternativa, riscrivi il percorso in modo che non sia relativo alla root:
- import helpers from 'src/helpers'
+ import helpers from '../src/helpers'
- Assicurati di non avere alias relativi. Vite li tratta come relativi al file in cui si trova l'importazione, piuttosto che alla root.
import { defineConfig } from 'vitest/config';
export default defineConfig({
test: {
alias: {
'@/': './src/',
'@/': new URL('./src/', import.meta.url).pathname,
},
},
});
Impossibile mockare "./mocked-file.js" perché è già stato caricato
Questo errore si verifica quando il metodo vi.mock
viene chiamato su un modulo che è già stato caricato. Vitest genera questo errore poiché tale chiamata non ha alcun effetto, dato che i moduli memorizzati nella cache sono preferiti.
Ricorda che vi.mock
viene sempre hoisted (sollevato), il che significa che il modulo è stato caricato prima che il file di test iniziasse l'esecuzione, molto probabilmente in un file di setup. Per correggere l'errore, rimuovi l'importazione o svuota la cache alla fine di un file di setup. Tieni presente che in tal caso il file di setup e il file di test faranno riferimento a moduli diversi.
// setupFile.js
import { vi } from 'vitest';
import { sideEffect } from './mocked-file.js';
sideEffect();
vi.resetModules();
Impossibile terminare il worker
Questo errore può verificarsi quando si utilizza fetch
di NodeJS con l'impostazione predefinita pool: 'threads'
. Questo problema è documentato nell'issue Timeout abort can leave process(es) running in the background #3077.
Come soluzione temporanea, puoi passare a pool: 'forks'
o pool: 'vmForks'
.
import { defineConfig } from 'vitest/config';
export default defineConfig({
test: {
pool: 'forks',
},
});
vitest --pool=forks
Segfault e errori di codice nativo
L'esecuzione di moduli nativi di NodeJS con pool: 'threads'
può causare errori criptici provenienti dal codice nativo.
Segmentation fault (core dumped)
thread '<unnamed>' panicked at 'assertion failed
Abort trap: 6
internal error: entered unreachable code
In questi casi, il modulo nativo probabilmente non è stato progettato per essere thread-safe (sicuro per il multi-threading). Come soluzione temporanea, puoi passare a pool: 'forks'
, che esegue i casi di test in più processi node:child_process
anziché in più node:worker_threads
.
import { defineConfig } from 'vitest/config';
export default defineConfig({
test: {
pool: 'forks',
},
});
vitest --pool=forks