Skip to content
Vitest 1
Main Navigation 指南API配置高级
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 集成

调试

与其他测试运行器的比较

迁移指南

常见错误

提升性能

API

测试 API 索引

模拟函数

Vi

expect

expectTypeOf

assert(断言)

assertType

配置

管理 Vitest 配置文件

配置 Vitest

页面导航

测试环境 ​

Vitest 提供了 environment 选项,用于在特定环境中运行代码。你可以使用 environmentOptions 选项来调整环境的行为。

默认情况下,以下环境可供使用:

  • node:默认环境。
  • jsdom:通过提供浏览器 API 来模拟浏览器环境,使用 jsdom 包。
  • happy-dom:通过提供浏览器 API 来模拟浏览器环境,通常比 jsdom 更快,但缺少一些 API,使用 happy-dom 包。
  • edge-runtime:模拟 Vercel 的 edge-runtime,使用 @edge-runtime/vm 包。

特定文件的环境 ​

如果在配置中设置了 environment 选项,它将应用于项目中的所有测试文件。为了更精细地控制测试环境,你可以使用控制注释来指定特定文件的环境。控制注释是以 @vitest-environment 开头,后跟环境名称的注释:

ts
// @vitest-environment jsdom

import { expect, test } from 'vitest';

test('test', () => {
  expect(typeof window).not.toBe('undefined');
});

或者,你也可以设置 environmentMatchGlobs 选项,以根据 glob 模式指定环境。

自定义环境 ​

从 0.23.0 开始,你可以创建自己的包来扩展 Vitest 环境。为此,可以创建一个名称为 vitest-environment-${name} 的包,或者指定一个有效的 JS 文件路径(自 0.34.0 起支持)。该包应导出一个符合 Environment 接口的对象:

ts
import type { Environment } from 'vitest';

export default <Environment>{
  name: 'custom',
  transformMode: 'ssr',
  // optional - only if you support "experimental-vm" pool
  async setupVM() {
    const vm = await import('node:vm');
    const context = vm.createContext();
    return {
      getVmContext() {
        return context;
      },
      teardown() {
        // called after all tests with this env have been run
      },
    };
  },
  setup() {
    // custom setup
    return {
      teardown() {
        // called after all tests with this env have been run
      },
    };
  },
};

WARNING

自 0.34.0 起,Vitest 要求环境对象必须包含 transformMode 选项。它必须是 ssr 或 web。该值决定了插件转换源代码的方式。如果设置为 ssr,插件钩子在转换或解析文件时将收到 ssr: true。否则,ssr 将设置为 false。

你还可以通过 vitest/environments 入口访问默认的 Vitest 环境。

ts
import { builtinEnvironments, populateGlobal } from 'vitest/environments';

console.log(builtinEnvironments); // { jsdom, happy-dom, node, edge-runtime }

Vitest 还提供了 populateGlobal 实用函数,用于将对象属性移动到全局命名空间。

ts
interface PopulateOptions {
  // should non-class functions be bind to the global namespace
  bindFunctions?: boolean;
}

interface PopulateResult {
  // a list of all keys that were copied, even if value doesn't exist on original object
  keys: Set<string>;
  // a map of original object that might have been overridden with keys
  // you can return these values inside `teardown` function
  originals: Map<string | symbol, any>;
}

export function populateGlobal(
  global: any,
  original: any,
  options: PopulateOptions
): PopulateResult;
Pager
上一页测试上下文
下一页扩展匹配器

基于 MIT 许可证 发布。

版权所有 (c) 2024 Mithril Contributors

https://v1.vitest.dev/guide/environment

基于 MIT 许可证 发布。

版权所有 (c) 2024 Mithril Contributors