vitest-testing by existential-birds/beagle
npx skills add https://github.com/existential-birds/beagle --skill vitest-testingimport { 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: 'of properties' })
// 异常
expect(() => fn()).toThrow()
expect(() => fn()).toThrow('错误信息')
expect(() => fn()).toThrow(/pattern/)
广告位招租
在这里展示您的产品或服务
触达数万 AI 开发者,精准高效
// 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('Error')
// 错误示例 - 会产生误报
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)
| 方法 | 用途 |
|---|---|
it() / test() | 定义测试 |
describe() | 分组测试 |
beforeEach() / afterEach() | 每个测试的钩子 |
beforeAll() / afterAll() | 每个测试套件的钩子 |
.skip | 跳过测试/套件 |
.only | 仅运行此项 |
.todo | 占位符 |
.concurrent | 并行执行 |
.each([...]) | 参数化测试 |
每周安装量
234
代码仓库
GitHub 星标数
40
首次出现
2026年1月20日
安全审计
安装于
opencode209
gemini-cli205
codex203
github-copilot193
claude-code192
cursor189
import { describe, it, expect, beforeEach, vi } from 'vitest'
describe('feature name', () => {
beforeEach(() => {
vi.clearAllMocks()
})
it('should do something specific', () => {
expect(actual).toBe(expected)
})
it.todo('planned test')
it.skip('temporarily disabled')
it.only('run only this during dev')
})
// Equality
expect(value).toBe(42) // Strict (===)
expect(obj).toEqual({ a: 1 }) // Deep equality
expect(obj).toStrictEqual({ a: 1 }) // Strict deep (checks types)
// Truthiness
expect(value).toBeTruthy()
expect(value).toBeFalsy()
expect(value).toBeNull()
expect(value).toBeUndefined()
// Numbers
expect(0.1 + 0.2).toBeCloseTo(0.3)
expect(value).toBeGreaterThan(5)
// Strings/Arrays
expect(str).toMatch(/pattern/)
expect(str).toContain('substring')
expect(array).toContain(item)
expect(array).toHaveLength(3)
// Objects
expect(obj).toHaveProperty('key')
expect(obj).toHaveProperty('nested.key', 'value')
expect(obj).toMatchObject({ subset: 'of properties' })
// Exceptions
expect(() => fn()).toThrow()
expect(() => fn()).toThrow('error message')
expect(() => fn()).toThrow(/pattern/)
// Async/await (preferred)
it('fetches data', async () => {
const data = await fetchData()
expect(data).toEqual({ id: 1 })
})
// Promise matchers - ALWAYS await these
await expect(fetchData()).resolves.toEqual({ id: 1 })
await expect(fetchData()).rejects.toThrow('Error')
// Wrong - creates false positive
expect(promise).resolves.toBe(value) // Missing await!
const mockFn = vi.fn()
mockFn.mockReturnValue(42)
mockFn.mockResolvedValue({ data: 'value' })
expect(mockFn).toHaveBeenCalled()
expect(mockFn).toHaveBeenCalledWith('arg1', 'arg2')
expect(mockFn).toHaveBeenCalledTimes(2)
| Method | Purpose |
|---|---|
it() / test() | Define test |
describe() | Group tests |
beforeEach() / afterEach() | Per-test hooks |
beforeAll() / afterAll() | Per-suite hooks |
.skip |
Weekly Installs
234
Repository
GitHub Stars
40
First Seen
Jan 20, 2026
Security Audits
Gen Agent Trust HubPassSocketPassSnykPass
Installed on
opencode209
gemini-cli205
codex203
github-copilot193
claude-code192
cursor189
Vue.js测试最佳实践:Vue 3组件、组合式函数、Pinia与异步测试完整指南
3,700 周安装
Java JPA Hibernate 实战:掌握数据持久化、查询优化与缓存策略
230 周安装
Diataxis框架指南:四种技术文档类型教程/操作指南/参考/说明编写方法
230 周安装
Telegram Bot 开发指南:Node.js/Python 构建机器人教程(含Webhook、支付、部署)
230 周安装
Salesforce Agentforce 会话追踪与可观测性分析技能 - 提取Parquet数据,调试AI智能体
230 周安装
产品定位构思指南:5步制定差异化品牌定位策略,实现市场竞争优势
230 周安装
macOS应用公证完整指南:使用asc-notarization进行开发者ID签名与公证
230 周安装
| Skip test/suite |
.only | Run only this |
.todo | Placeholder |
.concurrent | Parallel execution |
.each([...]) | Parameterized tests |