Chai-Http 框架中放弃 expect 进而使用 should 断言风险分析

阅读时长 6 分钟读完

Chai-Http 框架中放弃 expect 进而使用 should 断言风险分析

在前端开发中,我们经常需要进行接口测试,而 Chai-Http 就是比较流行的一个 Node.js 的 HTTP 测试框架。在使用 Chai-Http 进行接口测试的过程中,一个比较重要的部分就是对返回结果进行断言。而 Chai-Http 中给出了两种选择:expect 和 should 断言。本文将从风险的角度分析应当如何选择断言方式。

  1. expect 断言的缺陷

在 Chai 中使用 expect 进行断言,常常需要长长的链式语句,看起来并不容易理解。例如以下代码:

使用 expect 断言的代码可读性比较差,使用过程中容易写出冗余代码,增加维护成本。此外,若在链式断言中间出现了错误,那么整个链式语句就无法执行,而且断言错误提示也并不清晰。

  1. should 断言的优点

Chai 中的 should 断言相对于 expect 语法更简洁,更易于阅读和维护。例如,使用 should 语法的代码如下所示:

除了简洁性之外,should 断言还可以在链式语句中非常灵活地进行错误提示和错误处理。它支持多种类型的运算符,如deep / nested compare、truthy、empty、length、type 等,使得使用 should 对结果进行断言时非常方便。

  1. 在使用 should 断言时的注意事项

虽然 should 断言在可读性和简洁性方面比 expect 有明显优势,但在实际使用过程中,也需要注意以下几点。

(1) 需要手动引入 should 库

在使用 should 断言时,需要手动引入 should 库,如果没有引入,在应用程序中直接调用 should 断言会出现错误。

(2) 对于 undefined 和 null 值的处理

由于 JavaScript 中 null 和 undefined 可以是在 boolean 表达式中的一个值,如果使用 should 的时候不加注意,可能会出现 false 的情况,从而造成错误。这时可以通过 should.exist 和 should.not.exist 方法来判断变量是否存在。

(3) 对于异步调用的处理

在 Node.js 中,很多方法都是异步调用的,因此在使用 should 断言的时候,需要加上回调函数,在回调函数中执行下面的 expect 断言,正确的写法如下。

-- -------------------- ---- -------
---------- ------ ------- --------- ---- -- -
    ------------
        --------------
        ---------------- --------
        ---------- ---- -- -
            ---------------------
            ---------------------------------------
            ------
        --
--
展开代码
  1. 总结

在使用 Chai-Http 进行接口测试时,选择适合自己的断言方式非常重要。虽然 expect 断言在一些场景下更为灵活,但 should 断言在阅读性和健壮性两方面都更为优秀。在实际应用中,我们应当结合自身代码的实际情况,选择更合适的测试方式,并注意细节方面的问题,从而确保接口测试的准确性和健壮性。

最后,我们可以来看一下使用 should 断言的完整示例代码:

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

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

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

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

    -- ----- ---- --------
--
展开代码

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

纠错
反馈

纠错反馈