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 还提供了一种在源代码中与实现代码一同运行测试的方法,类似于 Rust 的模块测试。

这使得测试可以与实现共享相同的闭包,并且能够在不导出任何内容的情况下测试私有状态。同时,它也能为开发带来更快的反馈循环。

设置 ​

首先,在源文件末尾添加一个 if (import.meta.vitest) 代码块,并在其中编写测试。例如:

ts
// src/index.ts

// 实现
export function add(...args: number[]) {
  return args.reduce((a, b) => a + b, 0);
}

// 源码内测试套件
if (import.meta.vitest) {
  const { it, expect } = import.meta.vitest;
  it('add', () => {
    expect(add()).toBe(0);
    expect(add(1)).toBe(1);
    expect(add(1, 2, 3)).toBe(6);
  });
}

更新 Vitest 的 includeSource 配置,使其包含 src/ 目录下的文件:

ts
// vite.config.ts
/// <reference types="vitest" />
import { defineConfig } from 'vite';

export default defineConfig({
  test: {
    includeSource: ['src/**/*.{js,ts}'], 
  },
});

然后你就可以运行测试了!

bash
$ npx vitest

生产构建 ​

为了在生产构建中移除源码内测试代码,你需要在配置文件中设置 define 选项,以便打包器进行死代码消除。 例如,在 Vite 中:

ts
// vite.config.ts
/// <reference types="vitest" />
import { defineConfig } from 'vite';

export default defineConfig({
  test: {
    includeSource: ['src/**/*.{js,ts}'],
  },
  define: {
    'import.meta.vitest': 'undefined', 
  }, 
});

其他打包器 ​

unbuild
ts
// build.config.ts
import { defineBuildConfig } from 'unbuild';

export default defineBuildConfig({
  replace: {
    'import.meta.vitest': 'undefined', 
  }, 
  // other options
});

了解详情:unbuild

rollup
ts
// rollup.config.js
import replace from '@rollup/plugin-replace'; 

export default {
  plugins: [
    replace({
      'import.meta.vitest': 'undefined', 
    }), 
  ],
  // other options
};

了解详情:Rollup

TypeScript ​

要为 import.meta.vitest 添加 TypeScript 支持,请将 vitest/importMeta 添加到你的 tsconfig.json 的 types 数组中:

json
// tsconfig.json
{
  "compilerOptions": {
    "types": [
      "vitest/importMeta"
    ]
  }
}

完整示例可参考 test/import-meta。

注意事项 ​

此功能适用于以下场景:

  • 小范围函数或工具函数的单元测试
  • 快速原型开发
  • 内联断言

对于更复杂的测试(例如组件或 E2E 测试),建议使用单独的测试文件。

Pager
上一页浏览器模式
下一页测试上下文

基于 MIT 许可证 发布。

版权所有 (c) 2024 Mithril Contributors

https://v1.vitest.dev/guide/in-source

基于 MIT 许可证 发布。

版权所有 (c) 2024 Mithril Contributors