第16章 Vitest 测试环境:支持 Node、jsdom 与自定义扩展
测试环境 Vitest 提供 environment 选项,用于在特定环境中运行代码。你可以使用 environmentOptions 选项修改环境的行为。 默认情况下,你可以使用以下环境: node 是默认环境 jsdom 通过提供浏览器 API 来模拟浏览器环境,使用 jsdom 包 happy-dom 通过提供浏览器 API 来模拟浏览器环境,被认为比 jsdom 更快,但缺少某些 API,使用 happy-dom 包 edge-runtime 模拟 Vercel 的 edge-runtime,使用 @edge-runtime/vm 包 注意 在使用 jsdom 或 happy-dom 环境时,Vitest 遵循 Vite 在导入 CSS 和资源时相同的规则。如果导入外部依赖时出现未知扩展名 .css 错误,你需要通过将所有包添加到 server.deps.inline 来手动内联整个导入链。例如,如果在此导入链中 package-3 发生错误:源代码 -> package-1 -> package-2 -> package-3,你需要将这三个包都添加到 server.deps.inline。 外部依赖内部的 CSS 和资源的 require 会自动解析。 警告 “环境” 仅在 Node.js 中运行测试时存在。 browser 在 Vitest 中不被视为一种环境。如果你希望使用 Browser 模式运行部分测试,可以创建一个测试项目。 特定文件的环境 在配置中设置 environment 选项时,它将应用于项目中的所有测试文件。为了进行更精细的控制,你可以使用控制注释为特定文件指定环境。控制注释是以 @vitest-environment 开头并跟随环境名称的注释: ts // @vitest-environment jsdom import { expect, test } from 'vitest' test('test', () => { expect(typeof window).not.toBe('undefined') }) 自定义环境 你可以创建自己的包来扩展 Vitest 环境。为此,创建一个名为 vitest-environment-${name} 的包,或指定有效 JS/TS 文件的路径。该包应导出一个具有 Environment 形状的对象: ts import type { Environment } from 'vitest/runtime' export default