常見錯誤
找不到模組「./relative-path」
如果您收到找不到模組的錯誤,這可能代表幾種不同的情況
- 您拼錯路徑。請確認路徑正確無誤。
- 您可能依賴
tsconfig.json
中的baseUrl
。Vite 預設不會考量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'
- 請確定您沒有相關的 別名。Vite 會將它們視為相對於匯入檔案,而不是根目錄。
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()
無法終止工作執行緒
當使用預設的 pool: 'threads'
時,可能會發生此錯誤。此問題已追蹤在問題 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"
}