waitCore
waitFor
官方原文:等待回调成功执行。如果回调抛出错误或返回拒绝的承诺,它将继续等待,直到成功或超时。 如果 options 设置为一个数字,其效果等同于设置
{timeout:options}。 这在需要等待某些异步操作完成时非常有用,例如,在启动服务器并需要等待其启动时。
import { expect, test, vi } from 'vitest'
import { createServer } from './server.js'
test('Server started successfully', async () => {
const server = createServer()
await vi.waitFor(
() => {
if (!server.isReady) {
throw new Error('Server not started')
}
console.log('Server started')
},
{
timeout: 500, // default is 1000
interval: 20, // default is 50
}
)
expect(server.isReady).toBe(true)
})
简单来说,waitFor 就是等待某个回调函数成功执行,如果回调函数抛出错误或返回拒绝的承诺,它将继续等待重试,直到成功或超时。
waitUntil
官方原文:这与
vi.waitFor类似,但如果回调抛出任何错误,执行将立即中断并收到一条错误信息。如果回调返回虚假值(falsy) ,下一次检查将继续,直到返回真实值(truthy) 。这在需要等待某项内容存在后再执行下一步时非常有用。
import { expect, test, vi } from 'vitest'
test('Element render correctly', async () => {
const element = await vi.waitUntil(() => document.querySelector('.element'), {
timeout: 500, // default is 1000
interval: 20, // default is 50
})
// do something with the element
expect(element.querySelector('.element-child')).toBeTruthy()
})
简单来说,waitUntil 就是等待某个回调函数成功执行,如果回调函数返回虚假值(falsy),它将继续等待重试,直到返回真实值(truthy)或超时。
| 特性 | waitFor | waitUntil |
|---|---|---|
| 适用场景 | 等待某个回调成功执行(抛错则重试) | 等待回调返回 truthy 值 |
| 行为 | 回调抛错或 Promise reject 会继续等,直到成功或超时 | 返回 falsy 则重试;抛错会立刻失败 |
| 选项 | timeout, interval | timeout, interval |
| 返回值 | void(等待成功即可) | Promise<T>(得到 truthy 结果) |
和 Testing Library 的 waitFor 别混
| API | 从哪来 | 典型用途 |
|---|---|---|
vi.waitFor / vi.waitUntil | Vitest | 等任意条件(服务 ready、模块状态) |
waitFor from @testing-library/react | Testing Library | 等 DOM 断言通过(更常直接用 findBy*) |
测 React 组件时优先:
screen.findBy*等节点出现- 复杂断言再用 Testing Library 的
waitFor(() => expect(...)) - 与 DOM 无关的异步再用
vi.waitFor