跳至内容

常见错误

无法找到模块 './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' 时,NodeJS 的 fetch 会发生此错误。此问题在问题 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"
}