diff --git a/.github/workflows/autofix.yml b/.github/workflows/autofix.yml
index 9c1d52e36..92662400b 100644
--- a/.github/workflows/autofix.yml
+++ b/.github/workflows/autofix.yml
@@ -11,10 +11,10 @@ jobs:
timeout-minutes: 10
steps:
- - uses: actions/checkout@v5
+ - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
- name: Use Node.js lts/*
- uses: actions/setup-node@v4
+ uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
with:
node-version: lts/*
diff --git a/.vitepress/config.ts b/.vitepress/config.ts
index 53d31cd23..98a8d7031 100644
--- a/.vitepress/config.ts
+++ b/.vitepress/config.ts
@@ -42,7 +42,7 @@ export default ({ mode }: { mode: string }) => {
zh: {
label: 'English',
lang: 'en-US',
- link: 'https://vitest.dev/',
+ link: 'https://v3.vitest.dev/',
},
},
head: [
diff --git a/advanced/api/plugin.md b/advanced/api/plugin.md
index 709554e8e..92d03582f 100644
--- a/advanced/api/plugin.md
+++ b/advanced/api/plugin.md
@@ -14,6 +14,7 @@ outline: deep
Vitest 自 3.1 版起支持实验性的 `configureVitest` [插件](https://cn.vite.dev/guide/api-plugin) hook。欢迎在 [GitHub](https://github.com/vitest-dev/vitest/discussions/7104) 中提供有关此 API 的任何反馈。
::: code-group
+
```ts [only vitest]
import type { Vite, VitestPluginContext } from 'vitest/node'
@@ -26,6 +27,7 @@ export function plugin(): Vite.Plugin {
}
}
```
+
```ts [vite and vitest]
///
@@ -43,14 +45,16 @@ export function plugin(): Plugin {
}
}
```
+
:::
::: tip TypeScript
-Vitest 通过 `Vite` namespace 重新导出所有仅 Vite 类型的导入,我们可以使用它来保持版本同步。但是,如果我们正在为 Vite 和 Vitest 编写插件,则可以继续使用 `vite` 入口点的 `Plugin` 类型。只需确保我们在某处引用了 `vitest/config` ,以便正确增强 `configureVitest` 即可:
+Vitest 通过 `Vite` namespace 重新导出所有仅 Vite 类型的导入,我们可以使用它来保持版本同步。但是,如果我们正在为 Vite 和 Vitest 编写插件,则可以继续使用 `vite` 入口点的 `Plugin` 类型。只需确保我们在某处引用了 `vitest/config`,以便正确增强 `configureVitest` 即可:
```ts
///
```
+
:::
与 [`reporter.onInit`](/advanced/api/reporters#oninit) 不同,此 hooks 在 Vitest 生命周期的早期运行,允许我们更改 `coverage` 和 `reporters` 等配置。更值得注意的变化是,如果我们的插件是在项目中定义而不是在全局配置中定义的,我们可以从 [工作区项目](/guide/projects) 操作全局配置。
@@ -59,7 +63,7 @@ Vitest 通过 `Vite` namespace 重新导出所有仅 Vite 类型的导入,我
### project
-该插件所属的当前[测试项目](./test-project)。
+该插件所属的当前 [测试项目](./test-project)。
::: warning 浏览器模式
请注意,如果我们依赖浏览器功能,则 `project.browser` 字段尚未设置。请改用 [`reporter.onBrowserInit`](./reporters#onbrowserinit) 事件。
@@ -75,7 +79,7 @@ vitest.config.reporters.push([['my-reporter', {}]])
```
::: warning 配置已解析完成
-请注意,Vitest 已经解析了配置,因此某些类型可能与通常的用户配置不同。这也意味着某些属性将不会再次解析,例如 `setupFile` 。如果我们要添加新文件,请确保先解析它。
+请注意,Vitest 已经解析了配置,因此某些类型可能与通常的用户配置不同。这也意味着某些属性将不会再次解析,例如 `setupFile`。如果我们要添加新文件,请确保先解析它。
此时尚未创建记者,因此修改 `vitest.reporters` 将不起作用,因为它将被覆盖。如果我们需要注入自己的记者,请修改配置。
:::
diff --git a/advanced/api/reporters-life-cycle.md b/advanced/api/reporters-life-cycle.md
new file mode 100644
index 000000000..8da8416e3
--- /dev/null
+++ b/advanced/api/reporters-life-cycle.md
@@ -0,0 +1,21 @@
+- [`onInit`](#oninit)
+- [`onTestRunStart`](#ontestrunstart)
+ - [`onTestModuleQueued`](#ontestmodulequeued)
+ - [`onTestModuleCollected`](#ontestmodulecollected)
+ - [`onTestModuleStart`](#ontestmodulestart)
+ - [`onTestSuiteReady`](#ontestsuiteready)
+ - [`onHookStart(beforeAll)`](#onhookstart)
+ - [`onHookEnd(beforeAll)`](#onhookend)
+ - [`onTestCaseReady`](#ontestcaseready)
+ - [`onTestAnnotate`](#ontestannotate) 3.2.0
+ - [`onHookStart(beforeEach)`](#onhookstart)
+ - [`onHookEnd(beforeEach)`](#onhookend)
+ - [`onHookStart(afterEach)`](#onhookstart)
+ - [`onHookEnd(afterEach)`](#onhookend)
+ - [`onTestCaseResult`](#ontestcaseresult)
+ - [`onHookStart(afterAll)`](#onhookstart)
+ - [`onHookEnd(afterAll)`](#onhookend)
+ - [`onTestSuiteResult`](#ontestsuiteresult)
+ - [`onTestModuleEnd`](#ontestmoduleend)
+ - [`onCoverage`](#oncoverage)
+- [`onTestRunEnd`](#ontestrunend)
diff --git a/advanced/api/reporters.md b/advanced/api/reporters.md
index 632376fe8..ba9e84775 100644
--- a/advanced/api/reporters.md
+++ b/advanced/api/reporters.md
@@ -6,27 +6,7 @@
Vitest 拥有自己的测试运行生命周期。这些生命周期通过报告器的方法来表示:
-- [`onInit`](#oninit)
-- [`onTestRunStart`](#ontestrunstart)
- - [`onTestModuleQueued`](#ontestmodulequeued)
- - [`onTestModuleCollected`](#ontestmodulecollected)
- - [`onTestModuleStart`](#ontestmodulestart)
- - [`onTestSuiteReady`](#ontestsuiteready)
- - [`onHookStart(beforeAll)`](#onhookstart)
- - [`onHookEnd(beforeAll)`](#onhookend)
- - [`onTestCaseReady`](#ontestcaseready)
- - [`onTestAnnotate`](#ontestannotate) 3.2.0
- - [`onHookStart(beforeEach)`](#onhookstart)
- - [`onHookEnd(beforeEach)`](#onhookend)
- - [`onHookStart(afterEach)`](#onhookstart)
- - [`onHookEnd(afterEach)`](#onhookend)
- - [`onTestCaseResult`](#ontestcaseresult)
- - [`onHookStart(afterAll)`](#onhookstart)
- - [`onHookEnd(afterAll)`](#onhookend)
- - [`onTestSuiteResult`](#ontestsuiteresult)
- - [`onTestModuleEnd`](#ontestmoduleend)
- - [`onCoverage`](#oncoverage)
-- [`onTestRunEnd`](#ontestrunend)
+
除非被跳过,否则单个模块中的测试和 reporters 将按顺序报告。所有跳过的测试将在 reporters /模块的末尾报告。
@@ -60,6 +40,7 @@ function onInit(vitest: Vitest): Awaitable
请注意,我们还可以通过 [`project`](/advanced/api/test-project) 属性从测试用例、套件和测试模块中访问 `vitest` 实例,但在此方法中存储对 `vitest` 的引用也可能有用。
::: details 示例
+
```ts
import type { Reporter, TestSpecification, Vitest } from 'vitest/node'
@@ -81,6 +62,7 @@ class MyReporter implements Reporter {
export default new MyReporter()
```
+
:::
## onBrowserInit 实验性 {#onbrowserinit}
@@ -104,6 +86,7 @@ function onTestRunStart(
如果 Vitest 没有找到任何要运行的测试文件,此事件将以空数组调用,然后 [`onTestRunEnd`](#ontestrunend) 将立即被调用。
::: details 示例
+
```ts
import type { Reporter, TestSpecification } from 'vitest/node'
@@ -115,6 +98,7 @@ class MyReporter implements Reporter {
export default new MyReporter()
```
+
:::
::: tip 弃用通知
@@ -146,6 +130,7 @@ function onTestRunEnd(
如果 Vitest 没有找到任何要运行的测试文件,此事件将以空的模块和错误数组调用,状态将取决于 [`config.passWithNoTests`](/config/#passwithnotests) 的值。
::: details 示例
+
```ts
import type {
Reporter,
@@ -182,6 +167,7 @@ class MyReporter implements Reporter {
export default new MyReporter()
```
+
:::
::: tip 弃用通知
diff --git a/advanced/api/test-case.md b/advanced/api/test-case.md
index 334c473e0..140a5cc89 100644
--- a/advanced/api/test-case.md
+++ b/advanced/api/test-case.md
@@ -126,7 +126,7 @@ function ok(): boolean
function meta(): TaskMeta
```
-在测试执行期间附加到测试上的自定义[元数据](/advanced/metadata)。我们可以在测试运行期间通过给 `ctx.task.meta` 对象分配属性来附加元数据。
+在测试执行期间附加到测试上的自定义 [元数据](/advanced/metadata)。我们可以在测试运行期间通过给 `ctx.task.meta` 对象分配属性来附加元数据。
```ts {3,6}
import { test } from 'vitest'
@@ -146,7 +146,7 @@ test('the validation works correctly', ({ task }) => {
function result(): TestResult
```
-测试结果。如果测试尚未完成或刚刚开始收集,等于 `TestResultPending` :
+测试结果。如果测试尚未完成或刚刚开始收集,等于 `TestResultPending`:
```ts
export interface TestResultPending {
diff --git a/advanced/api/test-collection.md b/advanced/api/test-collection.md
index f7dd40de6..0a8e33744 100644
--- a/advanced/api/test-collection.md
+++ b/advanced/api/test-collection.md
@@ -12,6 +12,7 @@ for (const child of module.children) {
console.log(child.type, child.name)
}
```
+
:::
## size
diff --git a/advanced/api/test-project.md b/advanced/api/test-project.md
index 1d5f8c52f..b2978f9c9 100644
--- a/advanced/api/test-project.md
+++ b/advanced/api/test-project.md
@@ -13,6 +13,7 @@ title: TestProject
名称是由用户分配或由 Vitest 解析的唯一字符串。如果用户没有提供名称,Vitest 会尝试加载项目根目录中的 `package.json` 并从中获取 `name` 属性。如果没有 `package.json`,Vitest 默认使用文件夹的名称。内联项目使用数字作为名称(转换为字符串)。
::: code-group
+
```ts [node.js]
import { createVitest } from 'vitest/node'
@@ -24,6 +25,7 @@ vitest.projects.map(p => p.name) === [
'custom'
]
```
+
```ts [vitest.config.js]
import { defineConfig } from 'vitest/config'
@@ -48,6 +50,7 @@ export default defineConfig({
},
})
```
+
:::
::: info
@@ -74,6 +77,7 @@ const config: SerializedConfig = vitest.projects[0].serializedConfig
```ts
project.serializedConfig === project.serializedConfig // ❌
```
+
:::
## globalConfig
@@ -120,6 +124,7 @@ function provide(
除了 [`config.provide`](/config/#provide) 字段外,还提供了一种向测试提供自定义值的方法。所有值在存储之前都通过 [`structuredClone`](https://developer.mozilla.org/en-US/docs/Web/API/Window/structuredClone) 进行验证,但 `providedContext` 上的值本身不会被克隆。
::: code-group
+
```ts [node.js]
import { createVitest } from 'vitest/node'
@@ -128,10 +133,12 @@ const project = vitest.projects.find(p => p.name === 'custom')
project.provide('key', 'value')
await vitest.start()
```
+
```ts [test.spec.js]
import { inject } from 'vitest'
const value = inject('key')
```
+
:::
这些值可以动态提供。测试中提供的值将在下次运行时更新。
@@ -144,6 +151,7 @@ export default function setup({ provide }) {
provide('wsPort', 3000)
}
```
+
:::
## getProvidedContext
@@ -240,7 +248,7 @@ Vitest 使用 [fast-glob](https://www.npmjs.com/package/fast-glob) 来查找测
- `test.include`、`test.exclude` 用于查找常规测试文件
- `test.includeSource`、`test.exclude` 用于查找源代码中的测试
- `test.typecheck.include`、`test.typecheck.exclude` 用于查找类型检查测试
-:::
+ :::
## matchesTestGlob
@@ -286,6 +294,7 @@ const dynamicExample = await project.import('./example.js')
dynamicExample !== staticExample // ✅
```
+
:::
::: info
diff --git a/advanced/api/test-specification.md b/advanced/api/test-specification.md
index 6d7a65e44..2f1cf28ba 100644
--- a/advanced/api/test-specification.md
+++ b/advanced/api/test-specification.md
@@ -50,12 +50,14 @@ Vite 模块图中的模块 ID。通常,它是一个使用 POSIX 分隔符的
请注意,如果这些行中的至少一行没有测试,整个测试套件将会失败。以下是一个正确的 `testLines` 配置示例:
::: code-group
+
```ts [script.js]
const specification = project.createSpecification(
resolve('./example.test.ts'),
[3, 8, 9],
)
```
+
```ts:line-numbers{3,8,9} [example.test.js]
import { test, describe } from 'vitest'
@@ -68,6 +70,7 @@ describe('a group of tests', () => { // [!code error]
test.skip('skipped test')
})
```
+
:::
## toJSON
diff --git a/advanced/api/test-suite.md b/advanced/api/test-suite.md
index 168abfb50..6eaefa290 100644
--- a/advanced/api/test-suite.md
+++ b/advanced/api/test-suite.md
@@ -198,7 +198,8 @@ describe('collection failed', () => {
```ts
function meta(): TaskMeta
```
-在执行或收集过程中附加到套件的自定义[元数据](/advanced/metadata)。在测试运行期间,可以通过向 `task.meta` 对象分配属性来附加 meta:
+
+在执行或收集过程中附加到套件的自定义 [元数据](/advanced/metadata)。在测试运行期间,可以通过向 `task.meta` 对象分配属性来附加 meta:
```ts {5,10}
import { test } from 'vitest'
diff --git a/advanced/api/vitest.md b/advanced/api/vitest.md
index ec6625680..291ff7b36 100644
--- a/advanced/api/vitest.md
+++ b/advanced/api/vitest.md
@@ -23,7 +23,7 @@ Vitest 4 新增了多个 API(它们都标记有 "4.0.0+" 徽章),并移除
- `globTestSpecs`(使用 [`globTestSpecifications`](#globtestspecifications) 代替)
- `globTestFiles`(使用 [`globTestSpecifications`](#globtestspecifications) 代替)
- `listFile`(使用 [`getRelevantTestSpecifications`](#getrelevanttestspecifications) 代替)
-:::
+ :::
## mode
@@ -74,7 +74,7 @@ const testCase = vitest.state.getReportedEntity(task) // 新 API
## projects
-这是一个数组,里面包含了所有 [测试项目](/advanced/api/test-project) ,这些项目是用户自己定义的。如果用户没有显式指定任何项目,那么这个数组中只会包含一个 [根项目](#getrootproject) 。
+这是一个数组,里面包含了所有 [测试项目](/advanced/api/test-project),这些项目是用户自己定义的。如果用户没有显式指定任何项目,那么这个数组中只会包含一个 [根项目](#getrootproject)。
Vitest 会保证这个数组里至少有一个项目可用。如果用户在命令行里通过 --project 参数指定了不存在的项目名称,Vitest 会在创建这个数组前就报错。
@@ -145,7 +145,7 @@ function getProvidedContext(): ProvidedContext
function getProjectByName(name: string): TestProject
```
-此方法通过名称返回项目。类似于调用 `vitest.projects.find` 。
+此方法通过名称返回项目。类似于调用 `vitest.projects.find`。
::: warning
如果项目不存在,此方法将返回根项目 - 请确保再次检查返回的项目是否是我们要找的项目。
@@ -190,7 +190,7 @@ function getRelevantTestSpecifications(
- 如果我们需要获取已知测试文件的规范列表,请使用 [`getModuleSpecifications`](#getmodulespecifications) 代替。
- 如果我们需要获取所有可能的测试文件列表,请使用 [`globTestSpecifications`](#globtestspecifications)。
-:::
+ :::
## mergeReports
@@ -281,7 +281,7 @@ function runTestSpecifications(
): Promise
```
-该方法会根据接收到的 [测试规范](/advanced/api/test-specification) 运行所有测试。 第二个参数 `allTestsRun` 由覆盖率提供程序使用,用于确定是否需要对根目录下的每个文件进行覆盖率插桩(仅在启用覆盖率且 `coverage.all` 设置为 `true`时生效)。
+该方法会根据接收到的 [测试规范](/advanced/api/test-specification) 运行所有测试。 第二个参数 `allTestsRun` 由覆盖率提供程序使用,用于确定是否需要对根目录下的每个文件进行覆盖率插桩(仅在启用覆盖率且 `coverage.all` 设置为 `true` 时生效)。
::: warning
此方法不会触发 `onWatcherRerun`、`onWatcherStart` 和 `onTestsRerun` 回调。如果我们基于文件更改重新运行测试,请考虑使用 [`rerunTestSpecifications`](#reruntestspecifications) 代替。
@@ -403,6 +403,7 @@ const dynamicExample = await vitest.import('./example.js')
dynamicExample !== staticExample // ✅
```
+
:::
::: info
@@ -474,6 +475,7 @@ function onFilterWatchedSpecification(
fn: (specification: TestSpecification) => boolean
): void
```
+
注册一个处理程序,当文件更改时调用。此回调应返回 `true` 或 `false`,指示是否需要重新运行测试文件。
通过此方法,我们可以挂钩到默认的观察器逻辑,以延迟或丢弃用户当前不想跟踪的测试:
@@ -498,6 +500,6 @@ Vitest 可以根据 `pool` 或 `locations` 选项为同一文件创建不同的
function matchesProjectFilter(name: string): boolean
```
-检查名称是否与当前 [项目过滤器](/guide/cli#project) 匹配。如果没有项目过滤器,则始终返回 `true` 。
+检查名称是否与当前 [项目过滤器](/guide/cli#project) 匹配。如果没有项目过滤器,则始终返回 `true`。
无法通过编程方式更改 `--project` CLI 选项。
diff --git a/advanced/guide/tests.md b/advanced/guide/tests.md
index c5cb50044..cf715ed09 100644
--- a/advanced/guide/tests.md
+++ b/advanced/guide/tests.md
@@ -1,7 +1,7 @@
# 运行测试 {#running-tests}
::: warning 注意
-本指南介绍如何使用高级 API 通过 Node.js 脚本运行测试。如果您只想[运行测试](/guide/),则可能不需要这个。它主要被库的作者使用。
+本指南介绍如何使用高级 API 通过 Node.js 脚本运行测试。如果您只想 [运行测试](/guide/),则可能不需要这个。它主要被库的作者使用。
破坏性变更可能不会遵循 SemVer,请在使用实验性 API 时固定 Vitest 的版本。
:::
@@ -71,7 +71,7 @@ finally {
}
```
-如果我们打算保留 `Vitest` 实例,请确保至少调用 [`init`](/advanced/api/vitest#init) 。这将初始化报告器和覆盖率提供者,但不会运行任何测试。即使我们不打算使用 Vitest 观察器,但希望保持实例运行,也建议启用 `watch` 模式。Vitest 依赖此标志使其某些功能在连续过程中正常工作。
+如果我们打算保留 `Vitest` 实例,请确保至少调用 [`init`](/advanced/api/vitest#init)。这将初始化报告器和覆盖率提供者,但不会运行任何测试。即使我们不打算使用 Vitest 观察器,但希望保持实例运行,也建议启用 `watch` 模式。Vitest 依赖此标志使其某些功能在连续过程中正常工作。
报告器初始化后,如果需要手动运行测试,可以使用 [`runTestSpecifications`](/advanced/api/vitest#runtestspecifications) 或 [`rerunTestSpecifications`](/advanced/api/vitest#reruntestspecifications) 来运行测试。
@@ -106,6 +106,7 @@ watcher.on('add', async (file) => {
}
})
```
+
:::
如果你需要禁用监视器,可以从 Vite 5.3 开始传递 `server.watch: null`,或者在 Vite 配置中传递 `server.watch: { ignored: ['*/*'] }`:
diff --git a/advanced/metadata.md b/advanced/metadata.md
index d0b1a7e12..cdff167a4 100644
--- a/advanced/metadata.md
+++ b/advanced/metadata.md
@@ -40,13 +40,13 @@ export default {
::: danger BEWARE
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)之前序列化它们。
+另外,请确保在设置 [错误属性](https://developer.mozilla.org/en-US/docs/Web/API/Web_Workers_API/Structured_clone_algorithm#error_types) 之前序列化它们。
:::
当测试运行完成时,你还可以从 Vitest 状态获取此信息:
diff --git a/advanced/pool.md b/advanced/pool.md
index 76c165600..8b67b9aea 100644
--- a/advanced/pool.md
+++ b/advanced/pool.md
@@ -1,4 +1,4 @@
-# 自定义运行池
+# 自定义运行池 {#custom-pool}
::: warning
这是一个高级且非常底层的 API。如果你只是想 [运行测试](/guide/),你可能不需要这个。它主要由库作者使用。
diff --git a/advanced/reporters.md b/advanced/reporters.md
index 004b91837..b5be3978d 100644
--- a/advanced/reporters.md
+++ b/advanced/reporters.md
@@ -57,6 +57,7 @@ export default defineConfig({
},
})
```
+
## 报告的任务 {#reported-tasks}
建议使用 Reported Tasks API,而不是使用报告器接收到的任务。
diff --git a/advanced/runner.md b/advanced/runner.md
index 26c5c324e..1e4a88b34 100644
--- a/advanced/runner.md
+++ b/advanced/runner.md
@@ -135,6 +135,7 @@ export default class Runner {
}
}
```
+
:::
::: warning
@@ -226,7 +227,7 @@ interface Test extends TaskBase {
}
```
-每个任务都可以有一个 `result` 字段。只有当在套件回调或 `beforeAll`/`afterAll` 回调中抛出错误,阻止了测试的收集时,套件才会有这个字段。测试在它们的回调被调用后总是有这个字段——`state` 和 `errors` 字段根据结果的存在与否而存在。如果在 `beforeEach` 或 `afterEach` 回调中抛出了错误,抛出的错误将出现在 `task.result.errors` 中。
+每个任务都可以有一个 `result` 字段。只有当在套件回调或 `beforeAll`/`afterAll` 回调中抛出错误,阻止了测试的收集时,套件才会有这个字段。测试在它们的回调被调用后总是有这个字段 —— `state` 和 `errors` 字段根据结果的存在与否而存在。如果在 `beforeEach` 或 `afterEach` 回调中抛出了错误,抛出的错误将出现在 `task.result.errors` 中。
```ts
export interface TaskResult {
diff --git a/api/assert.md b/api/assert.md
index 9a3cffbbc..4d7a32bf6 100644
--- a/api/assert.md
+++ b/api/assert.md
@@ -111,7 +111,7 @@ test('assert.strictEqual', () => {
- **类型:** `(actual: T, expected: T, message?: string) => void`
-断言 `actual` 深度等于 `expected` 。
+断言 `actual` 深度等于 `expected`。
```ts
import { assert, test } from 'vitest'
@@ -125,7 +125,7 @@ test('assert.deepEqual', () => {
- **类型:** `(actual: T, expected: T, message?: string) => void`
-断言 `actual` 不深度等于 `expected` 。
+断言 `actual` 不深度等于 `expected`。
```ts
import { assert, test } from 'vitest'
@@ -139,7 +139,7 @@ test('assert.notDeepEqual', () => {
- **类型:** `(valueToCheck: number, valueToBeAbove: number, message?: string) => void`
-断言 `valueToCheck` 严格大于 (>) `valueToBeAbove` 。
+断言 `valueToCheck` 严格大于 (>) `valueToBeAbove`。
```ts
import { assert, test } from 'vitest'
@@ -153,7 +153,7 @@ test('assert.isAbove', () => {
- **类型:** `(valueToCheck: number, valueToBeAtLeast: number, message?: string) => void`
-断言 `valueToCheck` 大于等于 (>=) `valueToBeAtLeast` 。
+断言 `valueToCheck` 大于等于 (>=) `valueToBeAtLeast`。
```ts
import { assert, test } from 'vitest'
@@ -168,7 +168,7 @@ test('assert.isAtLeast', () => {
- **类型:** `(valueToCheck: number, valueToBeBelow: number, message?: string) => void`
-断言 `valueToCheck` 严格小于 (<) `valueToBeBelow` 。
+断言 `valueToCheck` 严格小于 (<) `valueToBeBelow`。
```ts
import { assert, test } from 'vitest'
@@ -182,7 +182,7 @@ test('assert.isBelow', () => {
- **类型:** `(valueToCheck: number, valueToBeAtMost: number, message?: string) => void`
-断言 `valueToCheck` 小于等于 (<=) `valueToBeAtMost` 。
+断言 `valueToCheck` 小于等于 (<=) `valueToBeAtMost`。
```ts
import { assert, test } from 'vitest'
@@ -688,7 +688,7 @@ test('assert.instanceOf', () => {
- `(haystack: WeakSet, needle: T, message?: string) => void`
- `(haystack: T, needle: Partial, message?: string) => void`
-断言 `haystack` 包含 `needle` 。可以用来断言数组中是否包含一个值、字符串中是否包含一个子字符串、或者对象中是否包含一组属性。
+断言 `haystack` 包含 `needle`。可以用来断言数组中是否包含一个值、字符串中是否包含一个子字符串、或者对象中是否包含一组属性。
```ts
import { assert, test } from 'vitest'
@@ -708,7 +708,7 @@ test('assert.include', () => {
- `(haystack: WeakSet, needle: T, message?: string) => void`
- `(haystack: T, needle: Partial, message?: string) => void`
-断言 `haystack` 不包含 `needle` 。可以用来断言数组中是否不包含一个值、字符串中是否不包含一个子字符串、或者对象中是否不包含一组属性。
+断言 `haystack` 不包含 `needle`。可以用来断言数组中是否不包含一个值、字符串中是否不包含一个子字符串、或者对象中是否不包含一组属性。
```ts
import { assert, test } from 'vitest'
@@ -727,7 +727,7 @@ test('assert.notInclude', () => {
- `(haystack: readonly T[] | ReadonlySet | ReadonlyMap, needle: T, message?: string) => void`
- `(haystack: T, needle: T extends WeakSet ? never : Partial, message?: string) => void`
-断言 `haystack` 包含 `needle` 。可以用来断言数组中是否包含一个值或对象中是否包含一组属性。使用深度相等。
+断言 `haystack` 包含 `needle`。可以用来断言数组中是否包含一个值或对象中是否包含一组属性。使用深度相等。
```ts
import { assert, test } from 'vitest'
@@ -748,7 +748,7 @@ test('assert.deepInclude', () => {
- `(haystack: readonly T[] | ReadonlySet | ReadonlyMap, needle: T, message?: string) => void`
- `(haystack: T, needle: T extends WeakSet ? never : Partial, message?: string) => void`
-断言 `haystack` 不包含 `needle` 。可以用来断言数组中是否不包含一个值或对象中是否不包含一组属性。使用深度相等。
+断言 `haystack` 不包含 `needle`。可以用来断言数组中是否不包含一个值或对象中是否不包含一组属性。使用深度相等。
```ts
import { assert, test } from 'vitest'
@@ -766,7 +766,7 @@ test('assert.notDeepInclude', () => {
- **类型:** `(haystack: any, needle: any, message?: string) => void`
-断言 `haystack` 包含 `needle` 。 可以用来断言对象中是否包含一组属性。允许使用点和括号表示法来引用嵌套属性。属性名中的 ‘[]’ 和 ‘.’ 可以使用双反斜杠转义。
+断言 `haystack` 包含 `needle`。 可以用来断言对象中是否包含一组属性。允许使用点和括号表示法来引用嵌套属性。属性名中的 ‘[]’ 和 ‘.’ 可以使用双反斜杠转义。
```ts
import { assert, test } from 'vitest'
@@ -781,7 +781,7 @@ test('assert.nestedInclude', () => {
- **类型:** `(haystack: any, needle: any, message?: string) => void`
-断言 `haystack` 不包含 `needle` 。可以用来断言对象中是否不包含一组属性。允许使用点和括号表示法来引用嵌套属性。属性名中的 ‘[]’ 和 ‘.’ 可以使用双反斜杠转义。
+断言 `haystack` 不包含 `needle`。可以用来断言对象中是否不包含一组属性。允许使用点和括号表示法来引用嵌套属性。属性名中的 ‘[]’ 和 ‘.’ 可以使用双反斜杠转义。
```ts
import { assert, test } from 'vitest'
@@ -796,7 +796,7 @@ test('assert.nestedInclude', () => {
- **类型:** `(haystack: any, needle: any, message?: string) => void`
-断言 `haystack` 包含 `needle` 。可以用来断言对象中是否包含一组属性,同时检查深度相等性。允许使用点和括号表示法来引用嵌套属性。属性名中的 ‘[]’ 和 ‘.’ 可以使用双反斜杠转义。
+断言 `haystack` 包含 `needle`。可以用来断言对象中是否包含一组属性,同时检查深度相等性。允许使用点和括号表示法来引用嵌套属性。属性名中的 ‘[]’ 和 ‘.’ 可以使用双反斜杠转义。
```ts
import { assert, test } from 'vitest'
@@ -811,7 +811,7 @@ test('assert.deepNestedInclude', () => {
- **类型:** `(haystack: any, needle: any, message?: string) => void`
-断言 `haystack` 不包含 `needle` 。可以用来断言对象中是否不包含一组属性,同时检查深度相等性。允许使用点和括号表示法来引用嵌套属性。属性名中的 ‘[]’ 和 ‘.’ 可以使用双反斜杠转义。
+断言 `haystack` 不包含 `needle`。可以用来断言对象中是否不包含一组属性,同时检查深度相等性。允许使用点和括号表示法来引用嵌套属性。属性名中的 ‘[]’ 和 ‘.’ 可以使用双反斜杠转义。
```ts
import { assert, test } from 'vitest'
@@ -826,7 +826,7 @@ test('assert.notDeepNestedInclude', () => {
- **类型:** `(haystack: any, needle: any, message?: string) => void`
-断言 `haystack` 包含 `needle` 。可以用来断言对象中是否包含一组属性,同时忽略继承的属性。
+断言 `haystack` 包含 `needle`。可以用来断言对象中是否包含一组属性,同时忽略继承的属性。
```ts
import { assert, test } from 'vitest'
@@ -840,7 +840,7 @@ test('assert.ownInclude', () => {
- **类型:** `(haystack: any, needle: any, message?: string) => void`
-断言 `haystack` 包含 `needle` 。可以用来断言对象中是否不包含一组属性,同时忽略继承的属性
+断言 `haystack` 包含 `needle`。可以用来断言对象中是否不包含一组属性,同时忽略继承的属性
```ts
import { assert, test } from 'vitest'
@@ -861,7 +861,7 @@ test('assert.notOwnInclude', () => {
- **类型:** `(haystack: any, needle: any, message?: string) => void`
-断言 `haystack` 包含 `needle` 。可以用来断言对象中是否包含一组属性,同时忽略继承的属性并检查深度相等性。
+断言 `haystack` 包含 `needle`。可以用来断言对象中是否包含一组属性,同时忽略继承的属性并检查深度相等性。
```ts
import { assert, test } from 'vitest'
@@ -875,7 +875,7 @@ test('assert.deepOwnInclude', () => {
- **类型:** `(haystack: any, needle: any, message?: string) => void`
-断言 `haystack` 不包含 `needle` 。可以用来断言对象中是否不包含一组属性,同时忽略继承的属性并检查深度相等性。
+断言 `haystack` 不包含 `needle`。可以用来断言对象中是否不包含一组属性,同时忽略继承的属性并检查深度相等性。
```ts
import { assert, test } from 'vitest'
@@ -889,7 +889,7 @@ test('assert.notDeepOwnInclude', () => {
- **类型:** `(value: string, regexp: RegExp, message?: string) => void`
-断言 `value` 匹配正则表达式 `regexp` 。
+断言 `value` 匹配正则表达式 `regexp`。
```ts
import { assert, test } from 'vitest'
@@ -903,7 +903,7 @@ test('assert.match', () => {
- **类型:** `(value: string, regexp: RegExp, message?: string) => void`
-断言 `value` 不匹配正则表达式 `regexp` 。
+断言 `value` 不匹配正则表达式 `regexp`。
```ts
import { assert, test } from 'vitest'
@@ -946,7 +946,7 @@ test('assert.notProperty', () => {
- **类型:** `(object: T, property: string, value: V, message?: string) => void`
-断言 `object` 具有由 `property` 指定的直接或继承属性,其值为 `value` 。使用严格相等检查(===)。
+断言 `object` 具有由 `property` 指定的直接或继承属性,其值为 `value`。使用严格相等检查(===)。
```ts
import { assert, test } from 'vitest'
@@ -960,7 +960,7 @@ test('assert.notPropertyVal', () => {
- **类型:** `(object: T, property: string, value: V, message?: string) => void`
-断言 `object` 没有由 `property` 指定的直接或继承属性,其值为 `value` 。使用严格相等检查(===)。
+断言 `object` 没有由 `property` 指定的直接或继承属性,其值为 `value`。使用严格相等检查(===)。
```ts
import { assert, test } from 'vitest'
@@ -975,7 +975,7 @@ test('assert.notPropertyVal', () => {
- **类型:** `(object: T, property: string, value: V, message?: string) => void`
-断言 `object` 具有由 `property` 指定的直接或继承属性,其值为 `value` 。使用深度相等检查。
+断言 `object` 具有由 `property` 指定的直接或继承属性,其值为 `value`。使用深度相等检查。
```ts
import { assert, test } from 'vitest'
@@ -991,7 +991,7 @@ test('assert.deepPropertyVal', () => {
- **类型:** `(object: T, property: string, value: V, message?: string) => void`
-断言 `object` 没有由 `property` 指定的直接或继承属性,其值为 `value` 。使用深度相等检查。
+断言 `object` 没有由 `property` 指定的直接或继承属性,其值为 `value`。使用深度相等检查。
```ts
import { assert, test } from 'vitest'
@@ -1041,7 +1041,7 @@ test('assert.deepPropertyVal', () => {
- **类型:** `(object: T, property: string, value: any, message?: string) => void`
-断言 `object` 具有由 `property` 指定的属性,其值为 `value` 给出。 `property` 可以使用点和方括号表示法进行嵌套引用。使用严格相等检查 (===)。
+断言 `object` 具有由 `property` 指定的属性,其值为 `value` 给出。`property` 可以使用点和方括号表示法进行嵌套引用。使用严格相等检查 (===)。
```ts
import { assert, test } from 'vitest'
@@ -1055,7 +1055,7 @@ test('assert.nestedPropertyVal', () => {
- **类型:** `(object: T, property: string, value: any, message?: string) => void`
-断言 `object` 没有由 `property` 指定的属性,其值为 `value` 给出。 `property` 可以使用点和方括号表示法进行嵌套引用。使用严格相等检查 (===)。
+断言 `object` 没有由 `property` 指定的属性,其值为 `value` 给出。`property` 可以使用点和方括号表示法进行嵌套引用。使用严格相等检查 (===)。
```ts
import { assert, test } from 'vitest'
@@ -1070,7 +1070,7 @@ test('assert.notNestedPropertyVal', () => {
- **类型:** `(object: T, property: string, value: any, message?: string) => void`
-断言 `object` 具有由 `property` 指定的属性,其值为 `value` 给出。 `property` 可以使用点和方括号表示法进行嵌套引用。使用深度相等检查。
+断言 `object` 具有由 `property` 指定的属性,其值为 `value` 给出。`property` 可以使用点和方括号表示法进行嵌套引用。使用深度相等检查。
```ts
import { assert, test } from 'vitest'
@@ -1085,7 +1085,7 @@ test('assert.notNestedPropertyVal', () => {
- **类型:** `(object: T, property: string, value: any, message?: string) => void`
-断言 `object` 没有由 `property` 指定的属性,其值为 `value` 给出。 `property` 可以使用点和方括号表示法进行嵌套引用。使用深度相等检查。
+断言 `object` 没有由 `property` 指定的属性,其值为 `value` 给出。`property` 可以使用点和方括号表示法进行嵌套引用。使用深度相等检查。
```ts
import { assert, test } from 'vitest'
@@ -1118,7 +1118,7 @@ test('assert.lengthOf', () => {
- **类型:** `(object: T, keys: Array