使用 Jest 进行测试
了解 Jest——JavaScript 应用测试的核心工具。
欢迎来到《Jest 完全指南》。如果你找到了这门课程,你很可能是一位希望提升测试技能的 JavaScript 工程师。为你点赞!这是一个绝佳的选择,因为测试是构建稳定、可扩展应用的强大工具。然而,测试的力量取决于我们编写它们的质量。
准确测试的重要性
高质量的测试让我们能够自信地快速迭代。当我们为代码设定明确的要求,确保其完成特定功能时,就可以在不意外破坏其他部分的前提下,安全地改变实现方式。例如,我们可能希望确保当用户点击 <button>提交</button> 时,表单确实能提交。即使我们更改了输入项、样式或元素嵌套结构,也仍然希望它能正常提交。通过为按钮功能编写测试,我们可以放心地进行这些修改,同时确信表单仍按预期工作。
反之,编写不当的测试会带来虚假的安全感。上述场景中,一个质量差的测试可能会让我们误以为表单没有被破坏,从而上线存在缺陷的代码。
那么,Jest 到底是什么?
“Jest 是一个专注于简洁性的愉悦的 JavaScript 测试框架。”
这句话直接摘自 Jest 的官方文档。虽然听起来不错,但并没有说明太多实质内容。
所以,到底什么是 Jest?

Jest 是由 Meta(前身为 Facebook)创建并维护的一个包。自 2014 年推出以来,它已发展多年,是一款成熟且得到充分支持的第三方工具。
Jest 被称为测试运行器。测试运行器是一个真正执行我们测试的程序。就像我们可以写出优美的代码,但需要特定工具才能让其运行一样,Jest 让我们能够实际运行所设计的测试。它具有高度灵活性,适用于多种环境和 JavaScript 框架。无论是 React 或 Angular 的前端应用,还是 Node.js 后端服务,只要涉及 JavaScript,Jest 都能无缝执行,并输出令人满意的绿色成功结果或令人沮丧的红色失败提示。
此时你可能意识到,Jest 本身并不能覆盖所有场景。在浏览器中测试 Vue 应用的需求,与在服务器上测试 Express 应用完全不同。
运行环境
Jest 是运行测试的绝佳工具,但 JavaScript 的多样性意味着我们需要额外的支持,来访问我们真正想要测试的代码部分或使用场景。测试服务器端代码与测试浏览器客户端大相径庭。
这种支持来自针对特定框架的测试库,比如 React 的 React Testing Library、Node.js 的 Supertest,以及 Angular 的 Angular Testing Library。这也意味着,要深入讨论 Jest,往往离不开具体 JavaScript 框架的背景。
注意:请记住,Jest 在运行机制上完全独立于这些框架,对它们没有任何依赖。
课程内容
本课程将聚焦于 Jest 的框架无关特性。我们的目标是让你掌握足够扎实的知识,无论后续切换到 Express、Next.js、Nest.js 还是 Vue,都能充分发挥 Jest 的全部能力。
在所有情况下,Jest 都提供了编写和记录测试的环境。我们可以利用 Jest 完成所有设置、模拟、数据桩化、文档组织、断言等操作。然后,只需使用自己偏好的库来实现具体的框架逻辑测试——比如查询 DOM 来验证用户可见的内容,或检查 HTTP 响应中的数据。
目前这听起来可能有些抽象。但我们将深入探讨这个环境及其提供的工具,并结合配套库的实际示例加以说明。现在,请把 Jest 想象成一台引擎,只要车辆符合标准,它就能驱动汽车、飞机甚至船只运行。