よくあるエラー
モジュール './relative-path' が見つかりません
モジュールが見つからないというエラーが表示される場合、以下の原因が考えられます。
- パスが間違っている可能性があります。正しいパスであることを確認してください。
tsconfig.jsonのbaseUrlに依存している可能性があります。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は常に巻き上げられることを覚えておいてください。つまり、モジュールはテストファイルの実行開始前にロードされています。おそらくセットアップファイル内でロードされたのでしょう。エラーを修正するには、インポートを削除するか、セットアップファイルの最後にキャッシュをクリアしてください。その場合、セットアップファイルとテストファイルが異なるモジュールを参照するため注意が必要です。
// 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セグメンテーション違反とネイティブコードエラー
pool: 'threads'でネイティブNodeJSモジュールを実行すると、ネイティブコードから不明なエラーが発生することがあります。
Segmentation fault (core dumped)thread '<unnamed>' panicked at 'assertion failedAbort trap: 6internal error: entered unreachable code
これらの場合、ネイティブモジュールはマルチスレッド対応になっていない可能性があります。回避策として、pool: 'forks'に切り替えることができます。これは、複数のnode:worker_threadsではなく、複数のnode:child_processでテストケースを実行します。
import { defineConfig } from 'vitest/config';
export default defineConfig({
test: {
pool: 'forks',
},
});vitest --pool=forks