Ziptax Tool Free
支持按地址、邮编或经纬度查询美国销售税率,含CLI封装与API调用说明。
下载 57
提供 Vitest 单元测试与集成测试的模式与最佳实践,涵盖断言、异步测试与模拟方法。
openclaw skills install @anderskev/vitest-testing命令、参数、文件名以原文为准
import { describe, it, expect, beforeEach, vi } from 'vitest'
describe('功能名称', () => {
beforeEach(() => {
vi.clearAllMocks()
})
it('应完成特定操作', () => {
expect(actual).toBe(expected)
})
it.todo('待实现的测试')
it.skip('临时禁用的测试')
it.only('开发时仅运行此测试')
})// 相等性
expect(value).toBe(42) // 严格相等(===)
expect(obj).toEqual({ a: 1 }) // 深度相等
expect(obj).toStrictEqual({ a: 1 }) // 严格深度相等(检查类型)
// 布尔值判断
expect(value).toBeTruthy()
expect(value).toBeFalsy()
expect(value).toBeNull()
expect(value).toBeUndefined()
// 数字
expect(0.1 + 0.2).toBeCloseTo(0.3)
expect(value).toBeGreaterThan(5)
// 字符串/数组
expect(str).toMatch(/pattern/)
expect(str).toContain('子字符串')
expect(array).toContain(item)
expect(array).toHaveLength(3)
// 对象
expect(obj).toHaveProperty('key')
expect(obj).toHaveProperty('nested.key', 'value')
expect(obj).toMatchObject({ subset: '属性子集' })
// 异常
expect(() => fn()).toThrow()
expect(() => fn()).toThrow('错误信息')
expect(() => fn()).toThrow(/模式/)// 推荐使用 async/await
it('获取数据', async () => {
const data = await fetchData()
expect(data).toEqual({ id: 1 })
})
// Promise 断言 —— 必须使用 await
await expect(fetchData()).resolves.toEqual({ id: 1 })
await expect(fetchData()).rejects.toThrow('错误')
// 错误示例 —— 可能导致假阳性
expect(promise).resolves.toBe(value) // 缺少 await!const mockFn = vi.fn()
mockFn.mockReturnValue(42)
mockFn.mockResolvedValue({ data: 'value' })
expect(mockFn).toHaveBeenCalled()
expect(mockFn).toHaveBeenCalledWith('arg1', 'arg2')
expect(mockFn).toHaveBeenCalledTimes(2)在添加或修改测试时,请按以下顺序执行每一步,每步需满足通过条件:
package.json 中的 scripts;常见为 vitest run、pnpm test 或 npm test)。通过标准: 退出码为 0,且报告中无失败测试。expect(…).resolves 和 expect(…).rejects 均以 await 开头(如 await expect(...)),详见 [异步测试](#async-testing)。若某行出现 resolves 或 rejects 但未加 await,则该门禁不通过。| 方法 | 用途 |
|---|---|
it() / test() | 定义测试用例 |
describe() | 分组测试 |
beforeEach() / afterEach() | 每个测试前/后执行的钩子 |
beforeAll() / afterAll() | 整个测试套件前/后执行的钩子 |
.skip | 跳过测试或测试组 |
.only | 仅运行当前测试 |
.todo | 占位测试 |
.concurrent | 并行执行 |
| .each([...]) | 参数化测试
已收录 7 个 Skill