Распространенные ошибки
Не удаётся найти модуль './relative-path'
Если вы получаете ошибку "модуль не найден", это может указывать на несколько возможных причин:
- Вы допустили ошибку в пути. Убедитесь, что путь указан верно.
- Возможно, вы полагаетесь на
baseUrl
в вашемtsconfig.json
. Vite по умолчанию не обрабатываетtsconfig.json
, поэтому вам может потребоваться самостоятельно установитьvite-tsconfig-paths
, если вы используете эту функциональность.
- Возможно, вы полагаетесь на
import { defineConfig } from 'vitest/config';
import tsconfigPaths from 'vite-tsconfig-paths';
export default defineConfig({
plugins: [tsconfigPaths()],
});
Или перепишите путь так, чтобы он не был относительным к корню проекта:
- import helpers from 'src/helpers'
+ import helpers from '../src/helpers'
- Убедитесь, что у вас нет относительных алиасов. Vite интерпретирует их как относительные к файлу, где находится импорт, а не к корню проекта.
import { defineConfig } from 'vitest/config';
export default defineConfig({
test: {
alias: {
'@/': './src/',
'@/': new URL('./src/', import.meta.url).pathname,
},
},
});
Не удаётся замокать "./mocked-file.js", потому что он уже загружен
Эта ошибка возникает, когда метод vi.mock
вызывается для модуля, который уже был загружен. Vitest выдает эту ошибку, поскольку такой вызов не имеет эффекта, так как кэшированные модули имеют приоритет.
Помните, что vi.mock
всегда "поднимается" (hoisted) — это означает, что его объявление обрабатывается до начала выполнения тестового файла — скорее всего, в setup-файле. Чтобы исправить ошибку, удалите импорт или очистите кэш в конце setup-файла. Учтите, что в этом случае setup-файл и ваш тестовый файл будут ссылаться на разные модули.
// setupFile.js
import { vi } from 'vitest';
import { sideEffect } from './mocked-file.js';
sideEffect();
vi.resetModules();
Не удалось завершить работу воркера
Эта ошибка может возникать при использовании NodeJS fetch
с пулом по умолчанию pool: 'threads'
. Эта проблема отслеживается в задаче Timeout abort can leave process(es) running in the background #3077.
В качестве временного решения вы можете переключиться на pool: 'forks'
или pool: 'vmForks'
.
import { defineConfig } from 'vitest/config';
export default defineConfig({
test: {
pool: 'forks',
},
});
vitest --pool=forks
Ошибки сегментации и ошибки в нативном коде
Запуск нативных модулей NodeJS в pool: 'threads'
может вызывать непонятные ошибки, возникающие из нативного кода.
Segmentation fault (core dumped)
thread '<unnamed>' panicked at 'assertion failed
Abort trap: 6
internal error: entered unreachable code
В этих случаях нативный модуль, скорее всего, не поддерживает безопасную работу в многопоточной среде. В качестве временного решения вы можете переключиться на pool: 'forks'
, который запускает тестовые случаи в нескольких node:child_process
вместо нескольких node:worker_threads
.
import { defineConfig } from 'vitest/config';
export default defineConfig({
test: {
pool: 'forks',
},
});
vitest --pool=forks