Chai 不同的风格断言方式的优劣分析

在进行前端开发中,我们需要进行各种各样的断言(assertion)来保证代码的正确性。Chai 是非常流行的 JavaScript 测试库,它有多种不同的风格的断言方式。本文将对 Chai 的不同风格的断言方式进行分析和比较,以便您能够选择最适合自己的方式来编写测试用例。

Chai 的三种风格

Chai 提供了三种不同的风格来进行断言:

  • assert 风格:这种风格使用 Node.js 的内置的 assert 模块来进行断言。它是最基础的风格,并且不提供任何语法糖。它需要处理错误信息,但是比其他两种风格打印的错误信息更简洁。

  • expect 风格:这是 Chai 提供的基于 BDD(行为驱动开发)的风格。它提供了许多语法糖,可以使代码更加易读和直观。

  • should 风格:这种风格是基于自然语言的,它可以使测试代码像自然语言一样易于阅读。它是最“口语化”的风格。

风格对比

对这三种风格进行详细对比,可以使我们更好地理解它们的优劣。

assert 风格

assert 风格的优点是最简单易懂,语法最为直接。assert 搭配 Mocha 使用时,如果断言出错,则不需要看错误堆栈就可以直接看出错误信息,这可以使调试变得更加简单。

举个例子,如果我们要测试一个加法方法,我们可以编写如下代码:

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

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

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

但是,这种风格没有提供太多的语法糖,因此测试代码往往相对较长,并且对于某些错误的描述也不够直观。

expect 风格

expect 风格是基于 BDD 的风格,它提供了类似自然语言的语法糖,可以让代码更具有可读性和可维护性。同时,它还提供了许多强大的特性,比如 .to.be.ok,可以在某个值为 truthy 时通过测试。

举个例子,如果我们要测试一个加法方法,我们可以编写如下代码:

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

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

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

这段代码更加自然,但有些人可能会觉得这种语法糖有时候太多,因此使代码更难懂。

should 风格

should 风格的好处在于它尽可能地与自然语言匹配,使得测试代码可以像普通语句一样解释。它赋予测试代码更好的可读性和可维护性。

举个例子,如果我们要测试一个加法方法,我们可以编写如下代码:

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

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

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

如您所见,should 风格的代码相对较少,并且更加像自然语言。但是, many people find that should 风格相对难懂一些。没有熟悉自然语言的人可能会感到困惑。

总结

Chai 提供了多种不同的风格的断言方式,每一种都有其尤为清晰的用例。坚持使用一种特定的风格有助于提高您测试代码的可读性、可维护性和可重用性。关于选择哪种风格,这取决于您个人的编码偏好。使用 assert 风格可以使您清楚地看到错误信息,但是没有那么多语言糖,使用 expect 风格可以使代码易读,但是容易混淆。而使用 should 风格对于熟悉自然语言的人来说会变得更加直观明了,但是对于不畅通英语的人来说可能会感到困惑。您(和您的团队)可以选择适合您的方式来编写测试用例。

示例代码

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

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

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

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

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

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

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

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

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

来源:JavaScript中文网 ,转载请联系管理员! 本文地址:https://www.javascriptcn.com/post/652d37a47d4982a6ebe9fcd4


猜你喜欢

相关推荐

    暂无文章