Распространенные ошибки
Не удаётся найти модуль './relative-path'
Если вы получаете сообщение об ошибке, указывающее на то, что модуль не удаётся найти, это может быть вызвано несколькими причинами:
- Ошибка в пути. Убедитесь в правильности указанного пути к модулю. Проверьте наличие опечаток и соответствие структуры каталогов.
- Использование
baseUrl
вtsconfig.json
. Vite по умолчанию не учитывает настройки, указанные вtsconfig.json
. Если вам необходимо, чтобыbaseUrl
учитывался при разрешении модулей, установите и настройте плагинvite-tsconfig-paths
.
- Использование
import { defineConfig } from 'vitest/config';
import tsconfigPaths from 'vite-tsconfig-paths';
export default defineConfig({
plugins: [tsconfigPaths()],
});
В качестве альтернативы, измените путь к модулю, чтобы он не зависел от корневой директории, указанной в baseUrl
:
- 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) - это означает, что модуль был загружен еще до того, как тестовый файл начал выполняться - скорее всего, в файле настройки. Чтобы исправить ошибку, удалите импорт или очистите кэш в конце файла настройки. Имейте в виду, что в этом случае файл настройки и ваш тестовый файл будут ссылаться на разные модули.
// setupFile.js
import { vi } from 'vitest';
import { sideEffect } from './mocked-file.js';
sideEffect();
vi.resetModules();
Не удалось завершить работу worker
Эта ошибка может произойти, когда NodeJS's fetch
используется со значением по умолчанию pool: 'threads'
. Эта проблема отслеживается в issue Timeout abort can leave process(es) running in the background #3077.
В качестве обходного пути вы можете переключиться на pool: 'forks'
или pool: 'vmForks'
.
Укажите pool
в вашем файле конфигурации:
import { defineConfig } from 'vitest/config';
export default defineConfig({
test: {
pool: 'forks',
},
});
Или в ваших скриптах package.json
:
scripts: {
- "test": "vitest"
+ "test": "vitest --pool=forks"
}