Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
40 commits
Select commit Hold shift + click to select a range
641c1fb
chore: revert package.json config.ts eslint.config.ts
NoiseFan Dec 16, 2025
a1193e5
!docs: recovery /guide/why
NoiseFan Dec 16, 2025
7eac654
chore: update eslint rules
NoiseFan Dec 16, 2025
757c856
!docs: recovery /guide/
NoiseFan Dec 16, 2025
a010686
!docs: recovery /guide/features
NoiseFan Dec 16, 2025
4049ef6
!docs: recovery /guide/workspace
NoiseFan Dec 18, 2025
cf79017
!docs: recovery /guide/cli
NoiseFan Dec 18, 2025
68d3f01
!docs: recovery /guide/cli
NoiseFan Dec 23, 2025
379ea49
!docs: recovery /guide/filtering
NoiseFan Dec 23, 2025
a194f73
!docs: recovery /guide/reporters
NoiseFan Dec 23, 2025
9b03dc7
!docs: recovery /guide/coverage
NoiseFan Dec 23, 2025
a311748
!docs: recovery /guide/snapshot
NoiseFan Dec 23, 2025
23dadab
!docs: recovery /guide/mocking
NoiseFan Dec 23, 2025
47fef7b
!docs: recovery /guide/ui
NoiseFan Dec 25, 2025
250092e
!docs: recovery /guide/browser
NoiseFan Dec 25, 2025
ac15ae0
!docs: recovery /guide/testing-types
NoiseFan Dec 25, 2025
1af968e
!docs: recovery /guide/in-source
NoiseFan Dec 25, 2025
019f424
!docs: recovery /guide/in-source
NoiseFan Dec 25, 2025
01cd9be
!docs: recovery /guide/environment
NoiseFan Dec 25, 2025
e9be80a
!docs: recovery /guide/extending-matchers
NoiseFan Dec 25, 2025
435d4c5
!docs: recovery /guide/ide
NoiseFan Dec 25, 2025
1600454
!docs: recovery /guide/debugging
NoiseFan Dec 25, 2025
d0f9a90
!docs: recovery /guide/comparisons
NoiseFan Dec 25, 2025
d5223a6
!docs: recovery /guide/migration
NoiseFan Dec 25, 2025
221e75f
!docs: recovery /guide/common-errors
NoiseFan Dec 25, 2025
99885a3
!docs: recovery /guide/improving-performance
NoiseFan Dec 25, 2025
7b63004
!docs: recovery /api/
NoiseFan Dec 25, 2025
1e0914c
!docs: recovery /api/mock
NoiseFan Jan 4, 2026
f6915b7
!docs: recovery /api/vi
NoiseFan Jan 4, 2026
c342e84
!docs: recovery api/expect.md
NoiseFan Jan 19, 2026
f162033
!docs: recovery api/expect-typeof.md
NoiseFan Jan 19, 2026
0c41610
!docs: recovery api/assert.md
NoiseFan Jan 20, 2026
f6851e6
!docs: recovery advanced/api.md
NoiseFan Jan 20, 2026
c7c5922
!docs: recovery advanced/api.md
NoiseFan Jan 20, 2026
16dc2ce
!docs: recovery config/file.md
NoiseFan Feb 20, 2026
5f4bc02
docs(cn): fix vite's link
NoiseFan Feb 25, 2026
a5b8776
!docs: recovery config/index.md
NoiseFan Mar 2, 2026
84e7b24
!docs: recovery /advanced
NoiseFan Mar 30, 2026
1ef563d
docs: add `old documentation` banner
NoiseFan Mar 30, 2026
62b8cf3
typo
NoiseFan Mar 30, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion .vitepress/components.d.ts
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
/* eslint-disable */
/* prettier-ignore */
// @ts-nocheck
// Generated by unplugin-vue-components
// Read more: https://github.com/vuejs/core/pull/3399
export {}

/* prettier-ignore */
declare module 'vue' {
export interface GlobalComponents {
Contributors: typeof import('./components/Contributors.vue')['default']
Expand All @@ -13,6 +13,7 @@ declare module 'vue' {
HomePage: typeof import('./components/HomePage.vue')['default']
ListItem: typeof import('./components/ListItem.vue')['default']
NonProjectOption: typeof import('./components/NonProjectOption.vue')['default']
OldDocument: typeof import('./components/OldDocument.vue')['default']
Version: typeof import('./components/Version.vue')['default']
}
}
1 change: 0 additions & 1 deletion .vitepress/components/FeaturesList.vue
Original file line number Diff line number Diff line change
Expand Up @@ -86,7 +86,6 @@
>expect-type</a>
进行类型测试
</ListItem>
<ListItem>支持分片</ListItem>
</ul>
</template>

Expand Down
41 changes: 41 additions & 0 deletions .vitepress/components/OldDocument.vue
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
<template>
<div class="old-document">
<p>
本文档适用于 v1 <strong>(旧版本)</strong>。如需查看最新版本请访问
<a href="https://cn.vitest.dev" class="new-document-link">https://cn.vitest.dev</a>.
</p>
</div>
</template>

<style>
:root {
--vp-layout-top-height: 96px;
@media (min-width: 455px) {
--vp-layout-top-height: 64px;
}
@media (min-width: 960px) {
--vp-layout-top-height: 32px;
}
}

.old-document {
position: fixed;
display: flex;
height: var(--vp-layout-top-height);
width: 100%;
padding: 4px 32px;
justify-content: center;
align-items: center;
color: var(--vp-c-old-document-text);
background: var(--vp-c-old-document-bg);
z-index: var(--vp-z-index-layout-top);

.new-document-link {
text-decoration: underline;
color: var(--vp-c-text-1);
&:hover {
color: var(--vp-c-text-2);
}
}
}
</style>
61 changes: 14 additions & 47 deletions .vitepress/config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -32,13 +32,13 @@ export default () => {
en: {
label: 'English',
lang: 'en',
link: 'https://vitest.dev/',
link: 'https://v1.vitest.dev/',
},
},
head: [
['meta', { name: 'theme-color', content: '#729b1a' }],
['link', { rel: 'icon', href: '/favicon.ico', sizes: '48x48' }],
['link', { rel: 'icon', href: '/logo.svg', sizes: 'any', type: 'image/svg+xml' }],
['link', { rel: 'icon', href: '/favicon.ico', sizes: 'any' }],
['link', { rel: 'icon', href: '/logo.svg', type: 'image/svg+xml' }],
['meta', { name: 'author', content: `${teamMembers.map(c => c.name).join(', ')} and ${vitestName} contributors` }],
['meta', { name: 'keywords', content: 'vitest, vite, test, coverage, snapshot, react, vue, preact, svelte, solid, lit, marko, ruby, cypress, puppeteer, jsdom, happy-dom, test-runner, jest, typescript, esm, tinypool, tinyspy, node' }],
['meta', { property: 'og:title', content: vitestName }],
Expand Down Expand Up @@ -69,7 +69,7 @@ export default () => {
logo: '/logo.svg',

editLink: {
pattern: 'https://github.com/vitest-dev/docs-cn/tree/dev/:path',
pattern: 'https://github.com/vitest-dev/docs-cn/tree/v1/:path',
text: '为此页提供修改建议',
},

Expand Down Expand Up @@ -123,7 +123,7 @@ export default () => {
text: '社区指南',
link: contributing,
},
]
],
},
{
items: [
Expand All @@ -135,10 +135,6 @@ export default () => {
text: 'v0.x',
link: 'https://v0.vitest.dev/',
},
{
text: 'v1.x',
link: 'https://v1.vitest.dev/',
},
],
},
],
Expand Down Expand Up @@ -173,12 +169,12 @@ export default () => {
],
},
],
'/': [
'/guide/': [
{
text: '指南',
items: [
{
text: '简介',
text: '为什么是 Vitest?',
link: '/guide/why',
},
{
Expand Down Expand Up @@ -222,45 +218,12 @@ export default () => {
link: '/guide/testing-types',
},
{
text: 'Vitest UI',
text: 'UI 模式',
link: '/guide/ui',
},
{
text: '浏览器模式',
link: '/guide/browser/',
collapsed: false,
items: [
{
text: 'Assertion API',
link: '/guide/browser/assertion-api',
docFooterText: 'Assertion API | Browser Mode',
},
{
text: 'Retry-ability',
link: '/guide/browser/retry-ability',
docFooterText: 'Retry-ability | Browser Mode',
},
{
text: 'Context',
link: '/guide/browser/context',
docFooterText: 'Context | Browser Mode',
},
{
text: 'Interactivity API',
link: '/guide/browser/interactivity-api',
docFooterText: 'Interactivity API | Browser Mode',
},
{
text: 'Commands',
link: '/guide/browser/commands',
docFooterText: 'Commands | Browser Mode',
},
{
text: 'Examples',
link: '/guide/browser/examples',
docFooterText: 'Examples | Browser Mode',
},
],
link: '/guide/browser',
},
{
text: '源码内联测试',
Expand All @@ -287,7 +250,7 @@ export default () => {
link: '/guide/debugging',
},
{
text: '与其他测试框架对比',
text: '测试框架比较',
link: '/guide/comparisons',
},
{
Expand All @@ -304,6 +267,8 @@ export default () => {
},
],
},
],
'/api/': [
{
text: 'API',
items: [
Expand Down Expand Up @@ -337,6 +302,8 @@ export default () => {
},
],
},
],
'/config/': [
{
text: '配置',
items: [
Expand Down
8 changes: 8 additions & 0 deletions .vitepress/style/vars.css
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,10 @@
--vp-c-brand-3: #506e10;
--vp-c-sponsor: #ca2971;
--vitest-c-sponsor-hover: #c13071;

/* Old Document */
--vp-c-old-document-bg: #f4f8e0;
--vp-c-old-document-text: #2a3a1b;
}

.dark {
Expand All @@ -16,6 +20,10 @@
--vp-c-brand-3: #acd268;
--vp-c-sponsor: #ee4e95;
--vitest-c-sponsor-hover: #e51370;

/* Old Document */
--vp-c-old-document-bg: #2d3b2e;
--vp-c-old-document-text: #c5d9b6;
}

/**
Expand Down
12 changes: 7 additions & 5 deletions .vitepress/theme/index.ts
Original file line number Diff line number Diff line change
@@ -1,13 +1,14 @@
import { h } from 'vue'
import type { Theme } from 'vitepress'
import DefaultTheme from 'vitepress/theme'
import TwoslashFloatingVue from '@shikijs/vitepress-twoslash/client'
import { inBrowser } from 'vitepress'
import DefaultTheme from 'vitepress/theme'
import { h } from 'vue'
import HomePage from '../components/HomePage.vue'
import OldDocument from '../components/OldDocument.vue'
import Version from '../components/Version.vue'
import '../style/main.css'
import '../style/vars.css'
import 'uno.css'
import TwoslashFloatingVue from '@shikijs/vitepress-twoslash/client'
import HomePage from '../components/HomePage.vue'
import Version from '../components/Version.vue'
import '@shikijs/vitepress-twoslash/style.css'

if (inBrowser) {
Expand All @@ -19,6 +20,7 @@ export default {
Layout() {
return h(DefaultTheme.Layout, null, {
'home-features-after': () => h(HomePage),
'layout-top': () => h(OldDocument),
})
},
enhanceApp({ app }) {
Expand Down
54 changes: 3 additions & 51 deletions advanced/api.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
Vitest 暴露了实验性的私有 API。由于可能不遵循语义化版本规范(SemVer),因此可能会出现不兼容的更改,请在使用 Vitest 时锁定版本。
:::

## 启动 Vitest
## startVitest

你可以使用 Vitest 的 Node API 开始运行 Vitest 测试:

Expand Down Expand Up @@ -34,7 +34,7 @@ await vitest?.close()

或者,你可以将完整的 Vite 配置作为第四个参数传递进去,这将优先于任何其他用户定义的选项。

## 创建 Vitest
## createVitest

你可以使用 `createVitest` 函数创建自己的 Vitest 实例. 它返回与 `startVitest` 相同的 `Vitest` 实例, 但不会启动测试,也不会验证已安装的包。

Expand Down Expand Up @@ -62,9 +62,8 @@ Vitest 实例需要当前的测试模式。它可以是以下之一:

- 运行运行时测试时为 `test`
- 运行基准测试时为 `benchmark`
- 运行类型测试时为 `typecheck`

### 模式
### 模式 {#mode}

#### test

Expand All @@ -74,53 +73,6 @@ Vitest 实例需要当前的测试模式。它可以是以下之一:

基准测试模式会调用 `bench` 函数,并在遇到 `test` 或 `it` 时抛出错误。此模式使用配置中的 `benchmark.include` 和 `benchmark.exclude` 选项查找基准测试文件。

#### typecheck

类型检查模式不会*运行*测试。它仅分析类型并提供摘要信息。此模式使用配置中的 `typecheck.include` 和 `typecheck.exclude` 选项查找要分析的文件。

### start

你可以使用 `start` 方法运行测试或者基准测试。你还可以传递一个字符串数组以筛选测试文件。


### `provide`

Vitest 暴露了`provide`方法,它是`vitest.getCoreWorkspaceProject().provide`的简写。使用该方法,您可以从主线程向测试传递值。所有值在存储前都会通过 `structuredClone`进行检查,但值本身不会被克隆。

要在测试中接收值,需要从 `vitest` entrypont 导入 `inject` 方法:

```ts
import { inject } from 'vitest'
const port = inject('wsPort') // 3000
```

为了提高类型安全性,我们鼓励您增强 `ProvidedContext` 的类型:

```ts
import { createVitest } from 'vitest/node'

const vitest = await createVitest('test', {
watch: false,
})
vitest.provide('wsPort', 3000)

declare module 'vitest' {
export interface ProvidedContext {
wsPort: number
}
}
```

::: warning
从技术上讲,`provide`是`WorkspaceProject`的一个方法,因此仅限于特定的项目。不过,所有项目都继承了核心项目的值,这使得 `vitest.provide` 成为向测试传递值的通用方法。
:::

::: tip
在不想使用公共 API 的情况下,[全局设置文件](/config/#globalsetup) 也可以使用此方法:

```js
export default function setup({ provide }) {
provide('wsPort', 3000)
}
```
:::
12 changes: 7 additions & 5 deletions advanced/metadata.md
Original file line number Diff line number Diff line change
Expand Up @@ -25,11 +25,11 @@ test('custom', ({ task }) => {
```ts
// custom-reporter.js
export default {
// you can intercept packs if needed
// 必要时可拦截数据包
onTaskUpdate(packs) {
const [id, result, meta] = packs[0]
},
// meta is located on every task inside "onFinished"
// 所有任务的元数据均位于 "onFinished" 方法内
onFinished(files) {
files[0].meta.done === true
files[0].tasks[0].meta.custom === 'some-custom-handler'
Expand All @@ -41,16 +41,18 @@ export default {
如果短时间内完成多个测试,Vitest 可以同时发送多个任务。
:::

::: danger BEWARE
::: danger 小心
Vitest 使用不同的方法与 Node.js 进程进行通信。

- 如果 Vitest 在工作线程内运行测试,它将通过[消息端口](https://developer.mozilla.org/en-US/docs/Web/API/MessagePort)发送数据
- 如果 Vitest 在工作线程内运行测试,它将通过 [消息端口](https://developer.mozilla.org/en-US/docs/Web/API/MessagePort) 发送数据
- 如果 Vitest 使用子进程,数据将通过 [`process.send`](https://nodejs.org/api/process.html#processsendmessage-sendhandle-options-callback) API 作为序列化缓冲区发送
- 如果 Vitest 在浏览器中运行测试,数据将使用 [flatted](https://www.npmjs.com/package/flatted) 包进行字符串化

该属性也会出现在每个测试的 `json` 报告中,因此请确保数据可以序列化为 JSON。

另外,请确保在设置[错误属性](https://developer.mozilla.org/en-US/docs/Web/API/Web_Workers_API/Structured_clone_algorithm#error_types)之前序列化它们。
一般经验法则是,你几乎可以发送任何内容,除了函数、Promises、regexp(`v8.stringify` 无法序列化它,但你可以发送字符串版本并自己在 Node.js 进程中解析它),以及其他不可序列化的数据,但内部可以有循环引用。

另外,请确保在设置 [错误属性](https://developer.mozilla.org/en-US/docs/Web/API/Web_Workers_API/Structured_clone_algorithm#error_types) 之前序列化它们。
:::

当测试运行完成时,你还可以从 Vitest 状态获取此信息:
Expand Down
6 changes: 4 additions & 2 deletions advanced/pool.md
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,9 @@ export default defineConfig({
},
},
// 还可以为文件子集指定池
poolMatchGlobs: [['**/*.custom.test.ts', './my-custom-pool.ts']],
poolMatchGlobs: [
['**/*.custom.test.ts', './my-custom-pool.ts']
],
},
})
```
Expand Down Expand Up @@ -69,7 +71,7 @@ Vitest 会等到 `runTests` 执行完毕后才结束运行(即只有在 `runTe
```ts
import { createBirpc } from 'birpc'
import { parse, stringify } from 'flatted'
import { WorkspaceProject, createMethodsRPC } from 'vitest/node'
import { createMethodsRPC, WorkspaceProject } from 'vitest/node'

function createRpc(project: WorkspaceProject, wss: WebSocketServer) {
return createBirpc(createMethodsRPC(project), {
Expand Down
Loading