Skip to content
Vitest 2
Main Navigation 指南API配置浏览器模式高级
2.1.9
1.6.1
0.34.6

简体中文

English
繁體中文
Español
Français
Русский
Português – Brasil
Deutsch
日本語
한국어
Italiano
Polski
Türkçe
čeština
magyar

简体中文

English
繁體中文
Español
Français
Русский
Português – Brasil
Deutsch
日本語
한국어
Italiano
Polski
Türkçe
čeština
magyar

主题

Sidebar Navigation

为什么选择 Vitest

快速开始

特性

工作区

命令行界面

测试筛选

报告器

代码覆盖率

快照(Snapshot)

模拟(Mocking)

类型测试

Vitest UI

源码内测试

测试上下文

测试环境

扩展匹配器

IDE 集成

调试

与其他测试运行器的比较

迁移指南

常见错误

Profiling Test Performance

提升性能

页面导航

常见错误 ​

无法找到模块 './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 总是会被提升(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'。

ts
import { defineConfig } from 'vitest/config';

export default defineConfig({
  test: {
    pool: 'forks',
  },
});
bash
vitest --pool=forks

Segfaults 和原生代码错误 ​

在 pool: 'threads' 中运行 原生 NodeJS 模块 可能会遇到原生代码中出现的难以理解的错误。

  • Segmentation fault (core dumped)
  • thread '<unnamed>' panicked at 'assertion failed
  • Abort trap: 6
  • internal error: entered unreachable code

在这些情况下,原生模块很可能不是为多线程安全而设计的。作为临时解决方案,您可以切换到 pool: 'forks',它会在多个 node:child_process 中运行测试用例,而不是在多个 node:worker_threads 中。

ts
import { defineConfig } from 'vitest/config';

export default defineConfig({
  test: {
    pool: 'forks',
  },
});
bash
vitest --pool=forks
Pager
上一页迁移指南
下一页Profiling Test Performance

基于 MIT 许可证 发布。

版权所有 (c) 2024 Mithril Contributors

https://v2.vitest.dev/guide/common-errors

基于 MIT 许可证 发布。

版权所有 (c) 2024 Mithril Contributors