利用 Chai 插件扩展 Chai 的断言库

阅读时长 7 分钟读完

利用 Chai 插件扩展 Chai 的断言库

Chai 是一个流行的 JavaScript 测试库,它提供了三种不同的风格来断言代码的正确性,分别是 expectshouldassert。其中 expect 是最常用的一种风格。Chai 提供了各种各样的断言,覆盖了许多常见的 JavaScript 数据类型和操作,但是在实际编写测试用例的过程中,我们往往需要自定义一些断言来满足特定的测试需求。这时候,Chai 插件就派上用场了。

在本篇文章中,我们将会学习如何使用 Chai 插件来扩展 Chai 的断言库。我们会用一个示例项目来演示如何编写、使用和测试 Chai 插件。

编写一个 Chai 插件

我们假设我们需要测试一个名为 Person 的类,它有一个 name 属性和一个 sayHello 方法。为了测试 sayHello 方法,我们需要编写一个自定义的 Chai 断言 sayHelloTo,用来判断调用 sayHello 时,Person 实例会不会正确地返回一个问候语。

首先,在你的项目中安装 Chai 和 Mocha:

然后,创建一个 person.js 文件,定义一个 Person 类:

-- -------------------- ---- -------
----- ------ -
  ----------------- -
    --------- - -----
  -

  ---------- -
    ------ ------- -- ---- -- ---------------
  -
-

-------------- - -------

接着,创建一个 chai-plugin.js 文件,它会是我们的 Chai 插件入口:

-- -------------------- ---- -------
----- -------------- - ------------------------------

-------------- - -------- ---------------- ------ -
  ----- - --------- - - -----

  --------------------------------- -------------- -
    ----- ------ - ----------
    ----- -------- - ---------------------- ------

    ------------
      -------- --- ------- -------- -- ---- -- -----------------
      --------- -------- -- -- ------- -------- -- ---- -- ---------------- --- --- -------------
      --------- -------- --- -- -- ------- -------- -- ---- -- -----------------
    --
  ---
--

首先,我们引入了一个名为 personSayHello 的模块,它将在后面用来计算问候语。然后,我们导出了一个接收 chaiutils 两个参数的函数,它会对 chai 对象进行修改。

在函数内部,我们获取了 Assertion 对象,并调用了它的 addMethod 方法,向 Chai 中添加了一个自定义的方法 sayHelloTo。这个方法接收一个名字参数 name,它表示要向谁打招呼。我们从断言对象 this._obj 中获取了要测试的 Person 实例,然后用 personSayHello 方法根据 personname 计算出问候语 greeting

最后,我们利用 this.assert 方法进行断言。我们期望 greeting 的值应该等于 Hello, ${name}, my name is ${person.name}.,如果不等于的话,就会抛出一个错误。同时,我们还提供了错误信息和反转信息,让测试报告更加友好。

最后,还需要实现上面提到的 personSayHello 方法,它的作用是根据 personname 计算出问候语:

至此,我们实现了一个简单的 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 的文件:

其中,我们指定了要测试的 Node.js 版本,以及执行测试的命令。这样,每次推送代码后,Travis CI 就会自动运行测试,如果测试失败就会发邮件通知我们。

总结

在本文中,我们学习了如何使用 Chai 插件,扩展 Chai 的断言库。我们从实现一个简单的 Chai 插件开始,然后演示了如何在测试中使用自定义断言,最后通过 Travis CI 实现了持续集成。希望这篇文章能够帮助你更好地理解前端测试和 Chai 插件的使用,让你的代码更加健壮可靠。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64e1a259f6b2d6eab3cd21d4

纠错
反馈