Skip to content

Commit 3c2087b

Browse files
committed
!docs: recovery /api/mock
1 parent 939aa89 commit 3c2087b

2 files changed

Lines changed: 9 additions & 48 deletions

File tree

.vitepress/config.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -692,7 +692,7 @@ function api(): DefaultTheme.SidebarItem[] {
692692
link: '/api/',
693693
},
694694
{
695-
text: 'Mocks',
695+
text: 'Mock Functions',
696696
link: '/api/mock',
697697
},
698698
{

api/mock.md

Lines changed: 8 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
# Mocks
1+
# Mock Functions
22

3-
`vi.fn` 即可创建 mock 函数或类,并全程记录其调用情况;若想监控已存在对象上的某个属性,则改用 `vi.spyOn`
3+
我们可以使用 `vi.fn` 方法创建一个 mock 函数来跟踪其执行情况。如果要跟踪已创建对象上的方法,可以使用 `vi.spyOn` 方法:
44

55
```js
66
import { vi } from 'vitest'
@@ -18,10 +18,10 @@ market.getApples()
1818
getApplesSpy.mock.calls.length === 1
1919
```
2020

21-
要验证 mock 的行为,请通过 [`expect`](/api/expect) 调用类似 [`toHaveBeenCalled`](/api/expect#tohavebeencalled) 的断言方法;以下 API 参考汇总了所有可用来操控 mock 的属性和方法
21+
我们应该在 [`expect`](/api/expect) 上使用 mock 断言(例如 [`toHaveBeenCalled`](/api/expect#tohavebeencalled) )来断言 mock 结果。在这里我们介绍了用于操作 mock 行为的可用属性和方法
2222

2323
::: tip
24-
The custom function implementation in the types below is marked with a generic `<T>`.
24+
下列类型中的自定义函数实现通过泛型 `<T>` 标记。
2525
:::
2626

2727
## getMockImplementation
@@ -42,7 +42,7 @@ function getMockImplementation(): T | undefined
4242
function getMockName(): string
4343
```
4444

45-
此方法返回由 `.mockName(name)` mock 指定的名称。`vi.fn()` 创建的替身默认返回 `'vi.fn()'``vi.spyOn` 生成的 spy 则沿用被监视方法的原始名称
45+
使用它来返回使用 `.mockName(name)` 方法分配给 mock 对象的名称。默认情况下,它将返回 `vi.fn()`
4646

4747
## mockClear
4848

@@ -215,7 +215,7 @@ await asyncMock() // 抛出 Error<'Async error'>
215215
function mockReset(): Mock<T>
216216
```
217217

218-
该方法会先执行与 [`mockClear`](#mockClear) 相同的清理,再重置 mock 的实现,并一并清除所有一次性(once)设定
218+
执行与 `mockClear` 相同的操作,并将内部实现设置为空函数(调用时返回 undefined)。这也会重置所有 “once” 实现。它对于将 mock 完全重置为其默认状态很有用
219219

220220
注意:
221221

@@ -378,37 +378,6 @@ fn.mock.calls
378378
]
379379
```
380380

381-
:::warning 对象按引用存储。
382-
请注意,Vitest`mock` 状态的所有属性中始终按引用保存对象。一旦你的代码修改了这些属性,诸如 [`.toHaveBeenCalledWith`](/api/expect#tohavebeencalledwith) 之类的断言便可能无法通过:
383-
384-
```ts
385-
const argument = {
386-
value: 0,
387-
}
388-
const fn = vi.fn()
389-
fn(argument) // { value: 0 }
390-
391-
argument.value = 10
392-
393-
expect(fn).toHaveBeenCalledWith({ value: 0 }) // [!code --]
394-
395-
// 相等性检查是针对原始参数进行的,
396-
// 但是,该参数的属性在调用和断言之间发生了更改。
397-
expect(fn).toHaveBeenCalledWith({ value: 10 }) // [!code ++]
398-
```
399-
400-
此时,可先自行克隆该参数:
401-
402-
```ts{6}
403-
const calledArguments = []
404-
const fn = vi.fn((arg) => {
405-
calledArguments.push(structuredClone(arg))
406-
})
407-
408-
expect(calledArguments[0]).toEqual({ value: 0 })
409-
```
410-
:::
411-
412381
## mock.lastCall
413382

414383
```ts
@@ -491,11 +460,6 @@ fn.mock.results
491460
## mock.settledResults
492461

493462
```ts
494-
interface MockSettledResultIncomplete {
495-
type: 'incomplete'
496-
value: undefined
497-
}
498-
499463
interface MockSettledResultFulfilled<T> {
500464
type: 'fulfilled'
501465
value: T
@@ -509,16 +473,13 @@ interface MockSettledResultRejected {
509473
export type MockSettledResult<T>
510474
= | MockSettledResultFulfilled<T>
511475
| MockSettledResultRejected
512-
| MockSettledResultIncomplete
513476
514477
const settledResults: MockSettledResult<Awaited<ReturnType<T>>>[]
515478
```
516479

517-
该数组按顺序记录了函数每次被调用后最终兑现或拒绝的值。
518-
519-
若函数返回的是非 Promise ,实际值会原封不动地保留,但状态仍被标记为 `fulfilled``rejected`
480+
包含函数中 `resolved``rejected` 的所有值的数组。
520481

521-
在结果出来前,对应的 `settledResult` 类型始终为 `incomplete`
482+
如果函数从未 resolvedrejected ,则此数组将为空
522483

523484
```js
524485
const fn = vi.fn().mockResolvedValueOnce('result')

0 commit comments

Comments
 (0)