文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

JavaScript Jest 忍者技巧:编写简洁且高效的测试

2024-02-17 04:28

关注

定制断言

Jest 提供了灵活的断言机制,允许您创建自定义断言以满足特定需求。通过使用 expect.extend() 方法,您可以扩展 Jest 的内置断言库,例如:

expect.extend({
  toBeStringEnum: (received) => {
    const pass = typeof received === "string" && Object.values(MyEnum).includes(received);
    return {
      pass,
      message: () => `Expected ${received} to be a string enum value in ${Object.values(MyEnum)}`,
    };
  },
});

异步测试优化

Jest 默认使用 setTimeout() 函数来调度异步测试。这会导致不必要的延迟和不可预测性。使用 fakeTimers 模块可以优化异步测试,使它们更可靠且更快。

// 引入 fakeTimers 模块
const { fakeTimers } = require("@jest/fake-timers");

// 创建一个模拟定时器
const timers = fakeTimers();

// 运行异步测试
it("should resolve after 100ms", () => {
  timers.runAllTimers();
  expect(result).toBe("resolved");
});

快照测试(Snapshot Testing)

快照测试通过将组件的当前输出与已知的“快照”进行比较来验证组件行为。这对于测试用户界面或复杂数据结构非常有用。使用 Jest 的 toMatchSnapshot() 断言可以轻松地写入快照测试。

it("should render correctly", () => {
  const wrapper = shallow(<MyComponent />);
  expect(wrapper.debug()).toMatchSnapshot();
});

时间旅行(Time Travel)

Jest 允许您在时间中“旅行”,模拟特定时间点。使用 advanceTimersByTime() 方法,您可以快进模拟时钟以测试时间敏感的行为。

// 快进模拟时钟
timers.advanceTimersByTime(1000);

// 验证时间敏感行为
expect(timeElapsed).toBe(1000);

spyOn 和 mockFn

spyOnmockFn 方法允许您监视和模拟函数调用。这对于测试依赖于外部库或类的方法很有用。

// 监视一个函数
const spy = spyOn(MyClass, "myMethod");

// 运行测试
myClass.myMethod();

// 验证函数调用
expect(spy).toHaveBeenCalled();

覆盖率报告

Jest 可以生成覆盖率报告,显示哪些代码行已在测试中覆盖。使用 --coverage 标志运行 Jest,生成报告并查找未涵盖的区域。

// 运行 Jest 覆盖率报告
npx jest --coverage

// 查看报告
open coverage/index.html

结论

熟练掌握这些 JavaScript Jest 忍者技巧,您将能够编写简洁、高效且易于维护的测试代码。通过定制断言、优化异步测试、使用快照测试、时间旅行、spyOn 和覆盖率报告,您可以提升 Jest 测试的水平,提高您的开发效率和代码质量。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-前端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯