Vitest Testing

提供 Vitest 单元测试与集成测试的模式与最佳实践,涵盖断言、异步测试与模拟方法。

已扫描
适合谁
前端开发工程师、Node.js 项目测试人员
不适合谁
无 JavaScript/TypeScript 开发经验者、非测试相关场景使用者
国内可用性
需网络配置。可能需要网络配置或第三方服务可访问。
安装难度
新手友好(★☆☆)。基于终端操作、依赖、API Key 和本地环境要求的初步判断。

安装与下载

openclaw skills install @anderskev/vitest-testing

Skill 说明

命令、参数、文件名以原文为准

Vitest 最佳实践

快速参考

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)

额外文档

  • 模拟:参见 [references/mocking.md](references/mocking.md) 了解模块模拟、监视、清理方法
  • 配置:参见 [references/config.md](references/config.md) 了解 vitest.config、设置文件、覆盖率配置
  • 模式:参见 [references/patterns.md](references/patterns.md) 了解定时器、快照、反模式

测试方法快速参考

方法用途
it() / test()定义测试
describe()分组测试
beforeEach() / afterEach()每个测试的钩子
beforeAll() / afterAll()整个测试套件的钩子
.skip跳过测试/套件
.only仅运行此测试
.todo占位测试
.concurrent并行执行
.each([...])参数化测试
A
@anderskev

已收录 6 个 Skill

相关推荐