Erreurs courantes
Module './relative-path' introuvable
Si vous rencontrez une erreur indiquant que le module est introuvable, plusieurs causes sont possibles :
- Le chemin spécifié est incorrect. Vérifiez l'exactitude du chemin.
- Vous vous appuyez peut-être sur
baseUrl
défini dans votretsconfig.json
. Par défaut, Vite n'interprète pastsconfig.json
. Si vous utilisez ce comportement, l'installation devite-tsconfig-paths
pourrait être nécessaire.
- Vous vous appuyez peut-être sur
import { defineConfig } from 'vitest/config';
import tsconfigPaths from 'vite-tsconfig-paths';
export default defineConfig({
plugins: [tsconfigPaths()],
});
Alternativement, vous pouvez réécrire votre chemin pour qu'il ne soit plus relatif à la racine :
- import helpers from 'src/helpers'
+ import helpers from '../src/helpers'
- Assurez-vous de ne pas utiliser d'alias basés sur des chemins relatifs. Vite les interprète comme étant relatifs au fichier où l'importation est effectuée, et non à la racine du projet.
import { defineConfig } from 'vitest/config';
export default defineConfig({
test: {
alias: {
'@/': './src/',
'@/': new URL('./src/', import.meta.url).pathname,
},
},
});
Impossible de mocker "./mocked-file.js" : déjà chargé
Cette erreur survient lorsque la méthode vi.mock
est appelée sur un module qui a déjà été chargé. Vitest génère cette erreur car un tel appel serait sans effet, les modules mis en cache ayant la priorité.
Il est important de noter que vi.mock
est toujours remonté (hoisted) – ce qui signifie que le module a été chargé avant même que le fichier de test ne commence à s'exécuter, très probablement dans un fichier de configuration (setup file). Pour corriger cette erreur, supprimez l'importation ou videz le cache à la fin d'un fichier de configuration. Dans ce dernier cas, le fichier de configuration et votre fichier de test feront référence à des modules différents.
// setupFile.js
import { vi } from 'vitest';
import { sideEffect } from './mocked-file.js';
sideEffect();
vi.resetModules();
Échec de la terminaison du worker
Cette erreur peut se produire lorsque la méthode fetch
de NodeJS est utilisée avec le pool: 'threads'
par défaut. Ce problème est documenté dans l'issue Timeout abort can leave process(es) running in the background #3077.
En guise de solution de contournement, vous pouvez opter pour pool: 'forks'
ou pool: 'vmForks'
.
import { defineConfig } from 'vitest/config';
export default defineConfig({
test: {
pool: 'forks',
},
});
vitest --pool=forks
Erreurs de segmentation et de code natif
L'exécution de modules NodeJS natifs dans un pool: 'threads'
peut entraîner des erreurs obscures provenant du code natif, telles que :
Segmentation fault (core dumped)
thread '<unnamed>' panicked at 'assertion failed
Abort trap: 6
internal error: entered unreachable code
Dans ces cas, le module natif n'est probablement pas conçu pour être thread-safe. En guise de solution de contournement, vous pouvez passer à pool: 'forks'
, qui exécute les cas de test dans plusieurs node:child_process
au lieu de plusieurs node:worker_threads
.
import { defineConfig } from 'vitest/config';
export default defineConfig({
test: {
pool: 'forks',
},
});
vitest --pool=forks