Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

校对检查 #400

Draft
wants to merge 1 commit into
base: dev
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
2 changes: 1 addition & 1 deletion advanced/api.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# Node API

::: warning
Vitest 暴露了实验性的私有 API。由于可能不遵循语义化版本规范(SemVer),因此可能会出现不兼容的更改,请在使用 Vitest 时锁定版本。
Vitest 暴露了实验性的私有 API。由于可能不严格遵循语义化版本规范,因此可能会出现破坏性更改,在使用 Vitest 的私有 API 时锁定版本。
:::

## 启动 Vitest
Expand Down
16 changes: 8 additions & 8 deletions advanced/metadata.md
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
# 任务元数据

::: warning
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

看到下文似乎都添加了注意,但是这一处好像没有,是不是统一加上会比较好

::: warning 注意

Vitest 导出了实验性私有 API。重大更改可能不遵循 semver,使用时请固定 Vitest 的版本
Vitest 暴露了实验性的私有 API。由于可能不严格遵循语义化版本规范,因此可能会出现破坏性更改,在使用 Vitest 的私有 API 时锁定版本
:::

如果你正在开发自定义报告器或使用 Vitest Node.js API,你可能会发现将在各种上下文中执行的测试中的数据传递给报告器或自定义 Vitest 处理程序很有用。

要实现此目的,依靠 [测试上下文](/guide/test-context) 是不可行的,因为它无法序列化。但是,使用 Vitest 时,你可以利用每个任务(套件或测试)上可用的 `meta` 属性在测试和 Node.js 进程之间共享数据。值得注意的是,这种通信只是单向的,因为 `meta` 属性只能在测试上下文中修改。Node.js 上下文中所做的任何更改在你的测试中都将不可见。

你可以在测试上下文中或在套件任务的 `beforeAll`/`afterAll` 钩子中填充 `meta` 属性。
你可以在测试上下文中或在测试套件的 `beforeAll`/`afterAll` 中填充 `meta` 属性。

```ts
afterAll((suite) => {
Expand All @@ -20,16 +20,16 @@ test('custom', ({ task }) => {
})
```

一旦测试完成,Vitest 将使用 RPC 将包含结果和 `meta` 的任务发送到 Node.js 进程。要拦截和处理此任务,你可以利用报告器实现中可用的 `onTaskUpdate` 方法:
一旦测试完成,Vitest 将使用 RPC 将包含结果和 `meta` 信息的任务发送到 Node.js 进程。要拦截和处理此任务,你可以利用报告器实现中可用的 `onTaskUpdate` 方法:

```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"
// meta 位于 `onFinished` 内的每个任务上
onFinished(files) {
files[0].meta.done === true
files[0].tasks[0].meta.custom === 'some-custom-handler'
Expand All @@ -38,15 +38,15 @@ export default {
```

::: warning
如果短时间内完成多个测试,Vitest 可以同时发送多个任务。
如果需要在短时间内完成多个测试,Vitest 可以同时发送多个任务。
:::

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

- 如果 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) 包进行字符串化
- 如果 Vitest 使用子进程,数据将通过 [`process.send`](https://nodejs.org/api/process.html#processsendmessage-sendhandle-options-callback) 作为序列化缓冲区发送
- 如果 Vitest 在浏览器中运行测试,数据将使用 [flatted](https://www.npmjs.com/package/flatted) 进行字符串化

一般经验法则是,你几乎可以发送任何内容,除了函数、Promises、regexp(`v8.stringify` 无法序列化它,但你可以发送字符串版本并自己在 Node.js 进程中解析它),以及其他不可序列化的数据,但内部可以有循环引用。

Expand Down
8 changes: 4 additions & 4 deletions advanced/pool.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ Vitest 在默认情况下以多种方式运行测试:
- `browser` 使用浏览器提供程序运行测试
- `typescript` 在测试中运行类型检查

你可以通过指定文件路径来提供自己的池
你可以通过指定文件路径来提供自己的「 池 / pool 」

```ts
export default defineConfig({
Expand Down Expand Up @@ -50,13 +50,13 @@ export interface ProcessPool {

这个函数只会被调用一次(除非服务器配置被更新),通常最好在这个函数内初始化测试所需的一切,并在调用 `runTests` 时重复使用它。

Vitest 在安排运行新测试时调用 `runTest`。如果 `files` 为空,将不会调用它。第一个参数是一个元组数组:第一个元素是对工作区项目的引用,第二个元素是测试文件的绝对路径。在调用 `runTests` 之前,文件将使用 [`sequencer`](/config/#sequence.sequencer) 进行排序。可能(但不太可能)会有相同的文件出现两次,但它们将始终属于不同的项目 - 这是通过 [`vitest.workspace.ts`](/guide/workspace) 配置实现的。
Vitest 在安排运行新测试时调用 `runTest`。如果 `files` 为空,将不会调用它。第一个参数是一个 tuples 数组:第一个元素是对工作区项目的引用,第二个元素是测试文件的绝对路径。在调用 `runTests` 之前,文件将使用 [`sequencer`](/config/#sequence.sequencer) 进行排序。可能(但不太可能)会有相同的文件出现两次,但它们将始终属于不同的项目 - 这是通过 [`vitest.workspace.ts`](/guide/workspace) 配置实现的。

Vitest 会等到 `runTests` 执行完毕后才结束运行(即只有在 `runTests` 解决后才会触发 [`onFinished`](/guide/reporters))。

如果你正在使用自定义池,需要自行提供测试文件及其结果 - 可以参考 [`vitest.state`](https://github.com/vitest-dev/vitest/blob/main/packages/vitest/src/node/state.ts)(最重要的是 `collectFiles` 和 `updateTasks`)。Vitest 使用 `@vitest/runner` 包中的 `startTests` 函数来执行这些操作。
如果你正在使用自定义 pool ,需要自行提供测试文件及其结果 - 可以参考 [`vitest.state`](https://github.com/vitest-dev/vitest/blob/main/packages/vitest/src/node/state.ts)(最重要的是 `collectFiles` 和 `updateTasks`)。Vitest 使用 `@vitest/runner` 包中的 `startTests` 函数来执行这些操作。

要在不同进程之间进行通信,可以使用 `vitest/node` 中的 `createMethodsRPC` 创建方法对象,并使用你喜欢的任何通信形式。例如,要使用 `birpc` 的 websockets,可以编写类似以下的内容:
要在不同进程之间进行通信,可以使用 `vitest/node` 中的 `createMethodsRPC` 创建方法对象,或使用你喜欢的任何通信形式。例如,要使用 `birpc` 的 websockets,可以编写类似以下的内容:

```ts
import { createBirpc } from 'birpc'
Expand Down
2 changes: 1 addition & 1 deletion advanced/runner.md
Original file line number Diff line number Diff line change
Expand Up @@ -115,7 +115,7 @@ Vitest 还会将 `ViteNodeRunner` 的实例作为 `__vitest_executor` 属性注

## 你的任务函数

你可以通过扩展 `Vitest` 的任务系统来添加你自己的任务。一个任务是一个对象,是套件的一部分。它会自动通过 `suite.task` 方法添加到当前套件中
你可以通过扩展 `Vitest` 的任务系统来添加你自己的任务。一个任务是一个对象,是测试套件的一部分。它会自动通过 `suite.task` 方法添加到当前测试套件中

```js
// ./utils/custom.js
Expand Down
10 changes: 5 additions & 5 deletions api/assert-type.md
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
# assertType

- **类型:** `<T>(value: T): void`

你可以使用此函数作为 [`expectTypeOf`](/api/expect-typeof) 的替代方法,以轻松地断言参数类型等于提供的泛型。

::: warning
在运行时,此函数不执行任何操作。要 [enable typechecking](/guide/testing-types#run-typechecking),不要忘记传递 `--typecheck` 标志
运行时,此函数不会执行任何操作。要 [「 启用类型检查 / enable typechecking](/guide/testing-types#run-typechecking),不要忘了传递 `--typecheck`。
:::

- **类型:** `<T>(value: T): void`

你可以使用此函数作为 [`expectTypeOf`](/api/expect-typeof) 的替代方法,可以轻松地断言参数类型等于提供的泛型。

```ts
import { assertType } from 'vitest'

Expand Down
40 changes: 20 additions & 20 deletions api/expect-typeof.md
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
# expectTypeOf

- **类型:** `<T>(a: unknown) => ExpectTypeOf`

::: warning
在运行时,此函数不执行任何操作。要 [enable typechecking](/guide/testing-types#run-typechecking),不要忘记传递 `--typecheck` 标志。
::: warning 注意
运行时,此函数不会执行任何操作。要 [「 启用类型检查 / enable typechecking 」](/guide/testing-types#run-typechecking),不要忘了传递 `--typecheck`。
:::

- **类型:** `<T>(a: unknown) => ExpectTypeOf`

## not

- **类型:** `ExpectTypeOf`
Expand Down Expand Up @@ -76,8 +76,8 @@ expectTypeOf(getResponsiveProp(cssProperties))
.toEqualTypeOf<CSSProperties[]>()
```

::: warning
如果在联合类型中找不到类型,`.extract` 将返回 `never`。
::: warning 注意
如果在 union 中找不到类型,`.extract` 将返回 `never`。
:::

## exclude
Expand Down Expand Up @@ -106,8 +106,8 @@ expectTypeOf(getResponsiveProp(cssProperties))

```

::: warning
如果在联合类型中找不到类型,`.extract` 将返回 `never`。
::: warning 注意
如果在 union 中找不到类型,`.extract` 将返回 `never`。
:::

## returns
Expand All @@ -123,7 +123,7 @@ expectTypeOf(() => {}).returns.toBeVoid()
expectTypeOf((a: number) => [a, a]).returns.toEqualTypeOf([1, 2])
```

::: warning
::: warning 注意
如果用在非函数类型上,它将返回 `never`,因此你将无法将它与其他匹配器链接起来。
:::

Expand All @@ -143,11 +143,11 @@ expectTypeOf<NoParam>().parameters.toEqualTypeOf<[]>()
expectTypeOf<HasParam>().parameters.toEqualTypeOf<[string]>()
```

::: warning
::: warning 注意
如果用在非函数类型上,它将返回 `never`,因此你将无法将它与其他匹配器链接起来。
:::

::: tip
::: tip 提示
你还可以使用 [`.toBeCallableWith`](#tobecallablewith) 匹配器作为更具表现力的断言。
:::

Expand All @@ -168,7 +168,7 @@ expectTypeOf(foo).parameter(0).toBeNumber()
expectTypeOf(foo).parameter(1).toBeString()
```

::: warning
::: warning 注意
如果用在非函数类型上,它将返回 `never`,因此你将无法将它与其他匹配器链接起来。
:::

Expand All @@ -186,11 +186,11 @@ expectTypeOf(Date).constructorParameters.toEqualTypeOf<
>()
```

::: warning
::: warning 注意
如果用在非函数类型上,它将返回 `never`,因此你将无法将它与其他匹配器链接起来。
:::

::: tip
::: tip 提示
你还可以使用 [`.toBeConstructibleWith`](#tobeconstructiblewith) 匹配器作为更具表现力的断言。
:::

Expand All @@ -206,7 +206,7 @@ import { expectTypeOf } from 'vitest'
expectTypeOf(Date).instance.toHaveProperty('toISOString')
```

::: warning
::: warning 注意
如果用在非函数类型上,它将返回 `never`,因此你将无法将它与其他匹配器链接起来。
:::

Expand Down Expand Up @@ -240,7 +240,7 @@ expectTypeOf(asyncFunc).returns.resolves.toBeNumber()
expectTypeOf(Promise.resolve('string')).resolves.toBeString()
```

::: warning
::: warning 注意
如果用于非承诺类型,它将返回 `never`,因此你将无法将它与其他匹配器链接起来。
:::

Expand All @@ -260,7 +260,7 @@ function isString(v: any): v is string {
expectTypeOf(isString).guards.toBeString()
```

::: warning
::: warning 注意
如果该值不是保护函数,则返回 `never`,因此你将无法将它与其他匹配器链接起来。
:::

Expand All @@ -281,7 +281,7 @@ function assertNumber(v: any): asserts v is number {
expectTypeOf(assertNumber).asserts.toBeNumber()
```

::: warning
::: warning 注意
如果该值不是断言函数,则返回 `never`,因此你将无法将它与其他匹配器链接起来。
:::

Expand Down Expand Up @@ -479,7 +479,7 @@ expectTypeOf<NoParam>().toBeCallableWith()
expectTypeOf<HasParam>().toBeCallableWith('some string')
```

::: warning
::: warning 注意
如果用在非函数类型上,它将返回 `never`,因此你将无法将它与其他匹配器链接起来。
:::

Expand All @@ -496,7 +496,7 @@ expectTypeOf(Date).toBeConstructibleWith(new Date())
expectTypeOf(Date).toBeConstructibleWith('01-01-2000')
```

::: warning
::: warning 注意
如果用在非函数类型上,它将返回 `never`,因此你将无法将它与其他匹配器链接起来。
:::

Expand Down
12 changes: 6 additions & 6 deletions api/expect.md
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ expect(input).toBe(2); // jest API

此外,`expect` 可以静态地使用来访问匹配器函数,稍后将会介绍。

::: warning
::: warning 注意
如果表达式没有类型错误,则 `expect` 对测试类型没有影响。 如果你想使用 Vitest 作为[类型检查器](/guide/testing-types),请使用 [`expectTypeOf`](/api/expect-typeof) 或 [`assertType`](/api/assert-type) 。
:::

Expand Down Expand Up @@ -55,7 +55,7 @@ test("expect.soft test", () => {
});
```

::: warning
::: warning 注意
`expect.soft` 只能在 [`test`](/api/#test) 函数的内部使用。
:::

Expand Down Expand Up @@ -541,7 +541,7 @@ test("top fruits", () => {
});
```

::: tip
::: tip 提示
如果错误消息中的值被截断得太厉害,可以在配置文件中增加 [chaiConfig.truncateThreshold](/config/#chaiconfig-truncatethreshold)。
:::

Expand Down Expand Up @@ -1088,7 +1088,7 @@ test("all assertions are called", async () => {
});
```

::: warning
::: warning 注意
在使用异步并发测试时,必须使用本地 [Test Context](/guide/test-context.md) 中的 `expect` 来确保正确的测试被检测到。
:::

Expand Down Expand Up @@ -1365,7 +1365,7 @@ test("custom matchers", () => {
});
```

::: tip
::: tip 提示
如果希望匹配器出现在每个测试中,应该在 [`setupFiles`](/config/#setupFiles) 中调用此方法。
:::

Expand All @@ -1384,7 +1384,7 @@ declare module "vitest" {
}
```

::: warning
::: warning 注意
不要忘记在 `tsconfig.json` 中包含环境声明文件。
:::

Expand Down