Jasmine 框架教程:单元测试示例
⚡ 智能摘要
Jasmine 是行为驱动型的 Java这是一个脚本测试框架,它使用 describe 块运行 Node.js 单元测试,无需浏览器或 DOM,它通过规范和期望匹配器来验证每个导出的函数是否按文档所述运行。
什么是 JasmineJS?
Jasmine 是一个开源且最流行的 Java脚本库测试框架来测试任何类型的 Java脚本应用程序。Jasmine 遵循行为驱动开发 (BDD) 程序,以确保每一行 Java脚本语句已经过适当的单元测试。
Jasmine 框架用于什么?
测试是任何应用程序的关键要素。对于 Node.js 单元测试,可用的测试框架是 Jasmine。在 2000 年代初期,也曾出现过一个用于测试的框架。 JavaScript 名为 JsUnit 的应用程序。 Later 该框架已升级,现在称为 Jasmine。
Jasmine 有助于自动化 单元测试这已成为开发过程中一项相当关键的做法ping 并部署现代网络应用程序。
在本 Jasmine 教程中,您将学习如何使用 Jasmine 设置您的环境以及如何为您的第一个 Node.js 应用程序运行 Jasmine 测试。
Jasmine 用于测试 Node.js 应用程序
茉莉花是 行为驱动开发(BDD) 测试框架 Java脚本。确实如此 不会 依赖于浏览器、DOM 或任何 Java脚本框架。因此,它适用于网站。 Node.js 项目,或任何其他地方 Java脚本可以运行。要开始使用 Jasmine,您需要先下载并安装必要的 Jasmine 模块。
如何设置 Jasmine 测试环境
接下来,在本 Jasmine Node.js 教程中,您需要初始化环境并检查 Jasmine 配置文件。以下步骤展示了如何在您的环境中设置 Jasmine。
步骤1) 安装 NPM 模块
您需要 安装 NPM jasmine 模块用于在 Node 应用程序中使用 Jasmine 框架。要安装 jasmine-node 模块,请运行以下命令。
npm install jasmine-node
版本说明(2026): 上述历史命令仍然有效,但是 茉莉节点 该模块处于维护模式,并且捆绑了 Jasmine 1.3,因此仅建议在旧项目中保留。新的 Node.js 项目会安装维护后的版本。 Jasmine CLI 作为开发依赖项,并通过 npx 调用它:
npm install --save-dev jasmine npx jasmine init
茉莉花 6.x 是当前的主要版本,支持 Node.js 20、22 和 24,Node.js 24 是 2026 年的活跃 LTS 版本。
步骤2) 初始化 Jasmine 环境
初始化项目——通过此操作,Jasmine 会为您创建一个 spec 目录和一个配置 JSON 文件。spec 目录用于存储所有测试文件。这样,Jasmine 就能知道所有测试文件的位置,并据此执行它们。 JSON 该文件用于存储有关 Jasmine 的特定配置信息。
要初始化 Jasmine 环境,请运行以下命令
jasmine init
步骤3) 检查您的配置文件。
配置文件将以 jasmine.json 的形式存储在 spec/support 文件夹中。此文件列举了您希望 Jasmine 运行器包含的源文件和 spec 文件。
下面截图显示了 Jasmine 的 jasmine.json 文件的典型示例。
- 注意这里指定了 spec 目录。如前所述,当 jasmine 运行时,它会搜索此目录中的所有测试。
- 接下来要注意的是 spec_files 参数——这表示无论创建什么测试文件都应附加“spec”关键字。
配置说明: 在 Jasmine 6.x 中,同一个文件也接受 佣工,它在每个规范之前加载一次,并且 ENV 包含诸如 random 和 stopSpecOnExpectationFailure 等块保存选项。默认的 spec_files 通配符是 **/*[sS]spec.?(m)js并且可以通过以下方式传递不同的文件: –config 或 JASMINE_CONFIG_PATH 变量。
接下来在本 Jasmine 框架教程中,我们将学习如何使用 Jasmine 测试 Node.js 应用程序。
如何使用 Jasmine 测试 Node.js 应用程序
为了使用 Jasmine 对 Node.js 应用程序进行单元测试,需要遵循一系列步骤。
在下面的示例中,我们将定义一个用于计算两个数字之和的模块,该模块需要进行测试。然后,我们将定义一个单独的代码文件来编写测试代码,并使用 Jasmine 对 Add 函数进行相应的测试。
步骤1) 定义需要测试的代码。我们将定义一个函数,它将添加两个数字并返回结果。此代码将写入名为“Add.js”的文件中。
下面的屏幕截图显示了完成的 Add.js 模块,其下方以文本形式重复显示了相同的代码。
var exports=module.exports={}; exports.AddNumber=function(a,b) { return a+b; };
Code 说明
- “exports”关键字用于确保该文件中定义的功能实际上可以被其他文件访问。
- 然后我们定义一个名为“AddNumber”的函数。此函数定义为采用 2 个参数 a 和 b。该函数被添加到模块“exports”,以使该函数成为可由其他应用程序模块访问的公共函数。
- 我们最终让我们的函数返回参数的附加值。
步骤2) 接下来,我们需要定义 Jasmine 测试代码,它将用于测试 Add.js 文件中的“Add”函数。以下代码需要放在一个名为 `.jasmine.js` 的文件中。 添加 spec.js。
注意:需要在测试文件中添加“spec”一词,以便 Jasmine 可以检测到它。
下面的屏幕截图显示的是在编辑器中打开的同一个 spec 文件。
var app=require("../Add.js"); describe("Addition",function(){ it("The function should add 2 numbers",function() { var value=app.AddNumber(5,6); expect(value).toBe(11); }); });
Code 说明
- 我们需要首先包含我们的 Add.js 文件,以便我们可以在此文件中测试“AddNumber”函数。
- 我们现在正在创建测试模块。测试模块的第一部分是描述一种方法,该方法基本上为我们的测试提供了一个名称。在本例中,我们的测试名称是“Addition”。
- 下一步是使用“it”方法对我们的测试进行描述。
- 现在我们调用 AddNumber 方法并传入两个参数 5 和 6。这两个参数将传递给 Add.js 文件中的 AddNumber 方法。返回值随后存储在名为 value 的变量中。
- 最后一步是进行比较或进行实际测试。由于我们期望 AddNumber 函数返回的值为 11,因此我们使用 expect(value).toBe(期望值) 方法来定义它。
输出
- 为了运行测试,需要运行命令 jasmine。
- 下面的截图显示,Jasmine 命令运行后,它会检测到名为 add-spec.js 的测试文件,并执行该测试。如果测试中出现任何错误,也会相应地显示出来。
Add 示例仅使用了一个匹配器,但 Jasmine 提供了一整套匹配器。下表列出了几乎涵盖您将编写的所有断言的匹配器。
你会最常用到的茉莉花火柴
匹配器是 expect() 之后的比较。在任何匹配器之前链式 .not 可以反转它,例如 expect(value).not.toBe(11)。
| 匹配器 | 检查内容 | 典型用途 |
| 待 | 严格意义上的同一性,与 === 的比较相同 | expect(value).toBe(11) |
| 等于 | 对象和数组的深度相等性 | expect(user).toEqual({id: 1}) |
| 包含 | 数组或字符串中的成员 | expect(files).toContain('add-spec.js') |
| 待定义 | 该值并非未定义。 | expect(app.AddNumber).toBeDefined() |
| 扔 | 包装后的函数会引发错误。 | expect(callAdd).toThrow() |
| 被呼唤 | 至少有一次提到了间谍。 | expect(logger.write).toHaveBeenCalled() |
两个习惯能让失败信息更易读。`toBe` 只用于基本类型和同名引用,因为内容相同的两个对象永远不会是 `===`。`toEqual` 用于结构体,并且当参数与调用本身同样重要时,可以添加 `toHaveBeenCalledWith`。
茉莉花中的设置、拆除和间谍
真正的套件需要共享状态和备份,以便于协作速度较慢的开发人员使用。Jasmine 无需任何额外软件包即可提供这两项功能。
- beforeEach 和 afterEach 在 describe 代码块中,在每个 spec 之前和之后运行,这是重建 fixtures 的自然位置。
- 一切之前和一切之后 整个街区只需运行一次,因此请将它们留给开通连接等昂贵的工作。
- spyOn(object, 'method') 用一个方法替换一个实际方法 tracking double;添加 .and.returnValue() 来控制它的返回值。
- jasmine.createSpy('name') 为没有对象可附加的回调函数构建一个独立的 double 对象。
- 异步规范 可以声明为异步函数并使用 await 等待,可以返回一个 Promise,或者可以接受一个必须只调用一次的 done 回调函数。
间谍会在测试用例之间重置,因此测试套件永远不会将桩方法泄露到下一个测试中。这种隔离机制使得失败的测试用例指向单个缺陷而不是一系列缺陷,这与之前描述的原则相同。 单元测试 基本面。
茉莉花 vs 摩卡 vs 杰斯特
Jasmine是三大主流框架之一。 Java脚本测试,最终的选择通常取决于你想拥有多少线路。
| 方面 | Jasmine | 摩卡 | 有 |
| 断言 | 内置 | 添加,通常是 Chai | 内置 |
| 间谍和嘲讽 | 内置 | 添加,通常是诗乃 | 内置 |
| 执行 | 串行 | 串行 | 跨流程并行 |
| 快照 | 没有 | 没有 | 是 |
| 公共住宅 | Angular,纯 Node.js | 灵活的Node.js技术栈 | React 和现代打包器 |
Pick 摩卡 当你想构建自己的断言和模拟堆栈时,以及 有 在并行运行中,覆盖率和快照比配置控制更重要。Jasmine 仍然是最轻量级且功能齐全的选择,这也是它仍然很受欢迎的原因。 自动化测试 套房。




