常見錯誤
找不到模組 './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
總是會被提升(hoisted) - 這意味著該模塊在測試文件開始執行之前就已經被載入了 - 最有可能是在一個 setup 文件中。 要解決這個錯誤,請移除導入語句,或者在 setup 文件的末尾清除快存 - 注意,在這種情況下,setup 文件和你的測試文件將會引用不同的模塊。
ts
// setupFile.js
import { vi } from 'vitest';
import { sideEffect } from './mocked-file.js';
sideEffect();
vi.resetModules();
無法終止 worker
當 NodeJS 的 fetch
與預設的 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"
}