mcpField
J
jest

jest

github.com/mindrally测试与质量287869 次安装3 周前更新
代码仓库

关于 jest

面向 JavaScript 和 TypeScript 项目的 Jest 测试实践技能,指导测试结构、模拟、断言、异步测试与有效覆盖率。

主要功能

  1. 01采用 AAA 结构编写清晰测试
  2. 02隔离测试的初始化与清理
  3. 03Jest 模拟模式
  4. 04精准断言与反向案例
  5. 05异步测试处理
  6. 06关注有效覆盖率与边界情况

适用场景

  1. 01按行为组织测试
  2. 02隔离测试间的副作用
  3. 03可靠地测试异步代码
  4. 04检查边界情况和错误行为

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/mindrally/skills --skill jest

安装后在 Claude Code 中输入/jest确认已加载。

详细介绍

Jest 测试最佳实践

你是 JavaScript、TypeScript 和 Jest 测试方面的专家。

核心原则

测试结构
  • 使用描述性测试名称,清楚说明预期行为
  • 使用 describe 块按逻辑分组组织测试
  • 每个测试都遵循 Arrange-Act-Assert(AAA)模式
  • 每个测试只关注一种行为或结果
设置与清理
  • 使用 beforeEach 和 afterEach 隔离测试
  • 使用 beforeAll 和 afterAll 进行可共享的耗时设置
  • 在清理钩子中清除所有副作用
模拟
  • 使用 jest.mock() 模拟模块
  • 使用 jest.fn() 模拟函数
  • 需要跟踪调用但保留实现时,使用 jest.spyOn()
  • 使用 jest.clearAllMocks() 在测试之间清除模拟
  • 避免过度模拟:条件允许时测试真实行为
断言
  • 使用最具体的匹配器
  • 比较对象时优先使用 toEqual,比较基本类型时使用 toBe
  • 谨慎使用 toMatchSnapshot,并为快照命名以便于理解
  • 加入否定测试用例(哪些情况不应发生)
异步测试
  • 异步测试中始终返回 Promise 或使用 async/await
  • 使用测试库中的 waitFor 进行异步断言
  • 为长时间运行的测试设置合适的超时时间
覆盖率
  • 追求有意义的覆盖率,而不只是较高的百分比
  • 测试边界情况和错误条件
  • 使用 --coverage 标志跟踪覆盖率指标
最佳实践
  • 让测试保持 DRY,同时确保可读性(清晰优先于简洁)
  • 测试行为,而不是实现细节
  • 确保测试具有确定性(未经设定种子的情况下,不使用随机数据)
  • 使用工厂或构建器创建测试数据

示例模式

describe('fetchUser', () => {
  it('should return user data when API call succeeds', async () => {
    const mockUser = { id: 1, name: 'John' };
    jest.spyOn(api, 'get').mockResolvedValue(mockUser);

    const result = await fetchUser(1);

    expect(result).toEqual(mockUser);
    expect(api.get).toHaveBeenCalledWith('/users/1');
  });

  it('should throw error when API call fails', async () => {
    jest.spyOn(api, 'get').mockRejectedValue(new Error('Not found'));

    await expect(fetchUser(999)).rejects.toThrow('Not found');
  });
});

评论

支持 Markdown