よくあるエラー
モジュール './relative-path' が見つかりません
モジュールが見つからないというエラーが表示される場合、いくつかの原因が考えられます。
- パスの記述に誤りがある可能性があります。パスが正しいか再度確認してください。
tsconfig.json
のbaseUrl
に依存している可能性があります。Vitest はデフォルトではtsconfig.json
の設定を読み込まないため、この機能を利用する場合は、vite-tsconfig-paths
を別途インストールする必要があります。
ts
import { defineConfig } from 'vitest/config';
import tsconfigPaths from 'vite-tsconfig-paths';
export default defineConfig({
plugins: [tsconfigPaths()],
});
または、パスをルート相対パスではなく、相対パスで記述してください。
diff
- import helpers from 'src/helpers'
+ import helpers from '../src/helpers'
- 相対エイリアスが正しく設定されているか確認してください。Vitest は、インポートパスをプロジェクトルートからのパスではなく、インポート元のファイルからの相対パスとして扱います。
ts
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
は常にホイスティングされることに注意してください。これは、モジュールがテストファイルの実行開始前に、おそらくセットアップファイルでロードされたことを意味します。 エラーを修正するには、インポートを削除するか、セットアップファイルの最後にキャッシュをクリアしてください。 その場合、セットアップファイルとテストファイルは異なるモジュールを参照することに注意してください。
ts
// setupFile.js
import { vi } from 'vitest';
import { sideEffect } from './mocked-file.js';
sideEffect();
vi.resetModules();
ワーカーを終了できませんでした
このエラーは、NodeJS の fetch
がデフォルトの pool: 'threads'
で使用されている場合に発生する可能性があります。 この問題は、issue Timeout abort can leave process(es) running in the background #3077 で追跡されています。
回避策として、pool: 'forks'
または pool: 'vmForks'
に切り替えることができます。
構成ファイルで pool
を指定します。
ts
import { defineConfig } from 'vitest/config';
export default defineConfig({
test: {
pool: 'forks',
},
});
または、package.json
スクリプトで指定します。
diff
scripts: {
- "test": "vitest"
+ "test": "vitest --pool=forks"
}