跳至內容

常見錯誤

找不到模組「./relative-path」

如果您收到找不到模組的錯誤,這可能代表幾種不同的情況

    1. 您拼錯路徑。請確認路徑正確無誤。
    1. 您可能依賴 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'
    1. 請確定您沒有相關的 別名。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"
}