Chai.js 断言库中的 assert 和 expect 的区别

阅读时长 4 分钟读完

Chai.js 是一款常用的 JavaScript 断言库,它提供了多种不同风格的断言接口,包括 assert、expect 和 should 等。在其中,assert 和 expect 是最常用和最基础的两个接口,但是它们又有一些区别。在本文中,我们将详细介绍 Chai.js 中的 assert 和 expect 的区别,并提供示例代码和实用指导。

assert

assert 接口是 Chai.js 中最基础的断言接口,其语法为 assert(expression, message)。其中,expression 表示需要断言的表达式,当其为真时,断言通过;否则断言不通过,将抛出异常,需要使用 try-catch 来捕获异常。message 参数为可选项,用于在断言失败时打印自定义信息。

assert 接口的使用通常分为两种场景。第一种是在测试框架中使用,例如在 Mocha 中:

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

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

在上述示例中,使用 assert.equal 表达式来断言 [1,2,3].indexOf(4) 的值为 -1,当其为真时,测试通过。

第二种场景是在编程中使用,例如:

在上述示例中,使用 assert.equal 表达式来断言 add(2, 3) 的值为 5,当其为真时,断言通过。如果 add(2, 3) 的值为其他值,例如 4,断言不通过,将抛出异常,异常信息为 '2 + 3 = 5'。

总体来说,assert 接口使用简单明了,但是需要手动捕获异常,当表达式复杂时容易出现错误。

expect

expect 接口是一个更加强大和灵活的断言接口,其语法为 expect(expression).method2(args2).method3(args3)。其中,expression 表示需要断言的表达式,而 method1、method2、method3 表示需要对 expression 进行的链式操作,例如 to.be.equal,to.be.a 等。这些方法可以使用自然语言方法链接,创造出一个更易读和可读性更好的断言。

expect 接口的使用通常分为两种场景。第一种是链式操作,例如:

在上述示例中,使用 expect 接口分别对一个数组、一个字符串、一个 null、一个 undefined 和一个对象进行了链式操作,断言它们的长度、类型、存在和属性等特征。

第二种场景是在编程中使用,例如:

在上述示例中,使用 expect 接口对 add(2, 3) 的值进行断言,如果其等于 5,则断言通过,否则断言不通过。

总体来说,expect 接口使用更加方便,链式操作可以提高可读性,但是需要注意方法名和调用顺序,以及链式操作的结束。

总结

assert 和 expect 接口是 Chai.js 中最基础和最常用的两个断言接口,它们有一些区别。assert 接口使用简单,但需要手动捕获异常,而 expect 接口则更加灵活,使用链式操作可以提高可读性。在使用时,我们可以根据场景和需求选择合适的接口。

除此之外,Chai.js 还有 should 接口和 BDD(behavior-driven development)和 TDD(test-driven development)风格的 expect 和 assert 接口。这些接口都可以根据实际需求进行选择和使用。

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

纠错
反馈