Chai 断言库中 expect、assert、should 有何区别

前言

在前端开发中,测试是必不可少的一环。而断言库则是测试中最重要的一环。Chai 断言库是目前最流行的断言库之一,简洁易用且功能强大。其中,expect、assert、should 是 Chai 断言库中的三种不同风格的断言方式,本文将详细介绍它们的区别。

expect

expect 风格的断言方式,是 Chai 中最为流行的风格。它使用链式调用的方式,从而使代码更为简洁易懂。例如:

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

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

从例子中可以看到,expect 方法直接调用,不需要传递任何参数。而在其后,通过 to 或其它关键字,来表示期望值的一系列属性,如 equal、not、deep、include 等。例如,上例中的 to.equal(-1),表示我们期望其返回值为 -1。同时,可以通过链式调用,实现多个期望值的校验。

assert

assert 风格的断言方式,与 expect 风格很相似,主要的区别在于调用方式不同。assert 风格是直接调用具体的断言函数,例如:

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

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

从上例中可以看到,assert 断言方式需要通过调用具体的断言方法来实现期望值的校验。其相对于 expect 风格的优点在于,在不使用链式调用时,能够更准确的定位问题。

should

should 风格的断言方式,与 expect 风格相似,但相对而言较为冗长。其实现方式是通过将期望值直接作为对象的属性来实现。例如:

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

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

从例子中可以看到,should 断言方式相对于 expect 风格而言,语义更为明确,同时使代码更加清晰。不过需要注意的是,should 会扩展 Object.prototype,因此可能会影响到全局环境。

结论

综上所述,Chai 断言库中的 expect、assert、should 风格,各具特点,用法灵活。因此,在实际工作中,我们需要深入理解其特点,并根据具体的场景选择合适的风格。最后推荐大家在使用 Chai 断言库时,参考官方文档,结合实际场景灵活使用。

示例代码

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

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

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

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

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/670dcce65f551281025e703d