如何在 Chai 中自定义新的断言方法

阅读时长 5 分钟读完

如何在 Chai 中自定义新的断言方法

Chai 是一款流行的 JavaScript 断言库,它支持 BDD 和 TDD 风格写法,以及针对不同环境的多个插件。但是,它不一定满足所有测试用例的需求。有时候,我们需要自定义一些断言方法,以便更好地适应我们的测试场景。本文将介绍在 Chai 中如何自定义新的断言方法。

Chai 的断言方法简介

在 Chai 中,有三种类型的断言方法:should、expect 和 assert。它们都可以用来进行断言,但是写法和语法略有不同。下面是一个例子:

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

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

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

这三种方法都可以达到相同的断言效果,只不过语法不同。应该选用哪一种方法,一般取决于个人的口味和项目组的规范。

如何自定义新的断言方法

Chai 提供了两种方式来自定义新的断言方法:扩展 chai.Assertion 构造器和创建插件。

扩展 chai.Assertion 构造器

chai.Assertion 是 Chai 中最基本的断言类。我们可以继承它来创建一个新的断言类,并添加我们需要的断言方法。下面是一个示例:

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

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

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

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

首先,我们使用了 Node.js 内置的 util 模块,将 MyAssertion 继承了 chai.Assertion。然后,我们在 MyAssertion.prototype 中添加了一个 .beFizz() 方法。

这个方法使用了 chai.Assertion.call(this, ...) 来构造一个新的断言对象,然后通过 this._obj 获取了待检测的实际值。之后,我们分别使用 new chai.Assertion() 来校验字符串类型和是否以 "fizz" 或 "FIZZ" 开头。

最后,我们使用了 chai.expect('') 来生成一个新的测试对象,并在其中连续使用 .beFizz() 和 .not.to.be.a() 断言方法。这样,我们就可以用自定义的 .beFizz() 方法来测试字符串是否以 "fizz" 或 "FIZZ" 开头了。

创建插件

创建插件是另一种自定义新的断言方法的方式。它可以分离项目中的个性化断言方法,以便于在多个项目中重复使用。下面是一个示例:

首先,我们引入了 chai 和自定义的插件模块。然后,我们使用了 chai.use() 方法将插件加入到 chai 中。最后,在 chai.expect('') 中使用新的 .beFizz() 方法。

插件代码如下所示:

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

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

--

在插件代码中,我们将自定义的 .beFizz() 方法添加到了 chai.Assertion.prototype 中,使得它成为了所有 chai.Assertion 对象的公共方法。utils.addMethod() 方法用于在 chai.Assertion.prototype 上添加新的方法。新方法的完整语法是 utils.addMethod(object, name, method),其中 object 是方法所在的对象,name 是方法名,method 是方法体。在本例中,我们将 name 设置为 "beFizz",method 设置为我们自定义的函数。

总结

本文介绍了在 Chai 中自定义新的断言方法。概括起来,有两种方式:扩展 chai.Assertion 构造器和创建插件。前者可以更加方便地在单个项目中添加自定义的断言方法,后者则更适合将这些方法提取为独立的插件,以便于多个项目中的重复使用。通过学习本文,我们可以更好地掌握 Chai 断言库的使用,并在需要的时候自定义新的断言方法。

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

纠错
反馈