利用 Chai 插件扩展 Chai 的断言库
Chai 是一个流行的 JavaScript 测试库,它提供了三种不同的风格来断言代码的正确性,分别是 expect
、should
和 assert
。其中 expect
是最常用的一种风格。Chai 提供了各种各样的断言,覆盖了许多常见的 JavaScript 数据类型和操作,但是在实际编写测试用例的过程中,我们往往需要自定义一些断言来满足特定的测试需求。这时候,Chai 插件就派上用场了。
在本篇文章中,我们将会学习如何使用 Chai 插件来扩展 Chai 的断言库。我们会用一个示例项目来演示如何编写、使用和测试 Chai 插件。
编写一个 Chai 插件
我们假设我们需要测试一个名为 Person
的类,它有一个 name
属性和一个 sayHello
方法。为了测试 sayHello
方法,我们需要编写一个自定义的 Chai 断言 sayHelloTo
,用来判断调用 sayHello
时,Person
实例会不会正确地返回一个问候语。
首先,在你的项目中安装 Chai 和 Mocha:
npm i -D chai mocha
然后,创建一个 person.js
文件,定义一个 Person
类:
-- -------------------- ---- ------- ----- ------ - ----------------- - --------- - ----- - ---------- - ------ ------- -- ---- -- --------------- - - -------------- - -------
接着,创建一个 chai-plugin.js
文件,它会是我们的 Chai 插件入口:
-- -------------------- ---- ------- ----- -------------- - ------------------------------ -------------- - -------- ---------------- ------ - ----- - --------- - - ----- --------------------------------- -------------- - ----- ------ - ---------- ----- -------- - ---------------------- ------ ------------ -------- --- ------- -------- -- ---- -- ----------------- --------- -------- -- -- ------- -------- -- ---- -- ---------------- --- --- ------------- --------- -------- --- -- -- ------- -------- -- ---- -- ----------------- -- --- --
首先,我们引入了一个名为 personSayHello
的模块,它将在后面用来计算问候语。然后,我们导出了一个接收 chai
和 utils
两个参数的函数,它会对 chai
对象进行修改。
在函数内部,我们获取了 Assertion
对象,并调用了它的 addMethod
方法,向 Chai 中添加了一个自定义的方法 sayHelloTo
。这个方法接收一个名字参数 name
,它表示要向谁打招呼。我们从断言对象 this._obj
中获取了要测试的 Person
实例,然后用 personSayHello
方法根据 person
和 name
计算出问候语 greeting
。
最后,我们利用 this.assert
方法进行断言。我们期望 greeting
的值应该等于 Hello, ${name}, my name is ${person.name}.
,如果不等于的话,就会抛出一个错误。同时,我们还提供了错误信息和反转信息,让测试报告更加友好。
最后,还需要实现上面提到的 personSayHello
方法,它的作用是根据 person
和 name
计算出问候语:
module.exports = function personSayHello(person, name) { return `Hello, ${name}, my name is ${person.name}.`; };
至此,我们实现了一个简单的 Chai 插件。
在测试中使用 Chai 插件
接下来,我们将在测试中使用刚才编写的 Chai 插件。首先,创建一个 test.js
文件:
-- -------------------- ---- ------- ----- ---- - ---------------- ----- ------ - -------------------- ----- ---------- - ------------------------- --------------------- ----- - ------ - - ----- ------------------ -- -- - --- ------- ------------- -- - ------ - --- ---------------- --- --------------------- -- -- - ---------- ------ - -------- -- --- ----- -------- -- -- - ------------------------------------ --- ---------- ------ - -------- -- --- ---- -------- -- -- - -------------------------------------- --- ---------- --- ------ - -------- -- - ------------ -------- -- -- - -------------------------------------------- --- --- ---
首先,我们引入了 Chai,Person
类和刚才编写的 Chai 插件。然后,我们使用 chai.use
方法加载了我们的插件,并从 chai
对象中获取了 expect
方法。
在测试用例中,我们先创建了一个 person
实例,然后分别编写了三个测试用例。这三个测试用例分别使用了刚才编写的自定义断言 sayHelloTo
,来测试 Person
类的 sayHello
方法。
第一个测试用例中,我们期望 person
打招呼给 Bob
后,会返回正确的问候语。第二个测试用例中,我们期望 person
打招呼给自己时,也会返回正确的问候语。第三个测试用例中,我们期望 person
不会对一个不存在的人打招呼。
最后,执行 mocha test.js
,运行测试用例,我们会看到测试通过了。
使用 Travis CI 进行持续集成
为了进一步提高项目的可靠性,我们可以使用 Travis CI 进行持续集成。在项目根目录下,创建一个名为 .travis.yml
的文件:
language: node_js node_js: - "8" - "10" - "12" script: - npm test
其中,我们指定了要测试的 Node.js 版本,以及执行测试的命令。这样,每次推送代码后,Travis CI 就会自动运行测试,如果测试失败就会发邮件通知我们。
总结
在本文中,我们学习了如何使用 Chai 插件,扩展 Chai 的断言库。我们从实现一个简单的 Chai 插件开始,然后演示了如何在测试中使用自定义断言,最后通过 Travis CI 实现了持续集成。希望这篇文章能够帮助你更好地理解前端测试和 Chai 插件的使用,让你的代码更加健壮可靠。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64e1a259f6b2d6eab3cd21d4