Chai 断言库之 should 和 expect 的区别

阅读时长 3 分钟读完

前言

在进行前端开发的过程中,我们不可避免的要进行一些测试工作。而在测试过程中,断言库则是不可或缺的工具。其中,Chai 作为一个功能强大的 JavaScript 断言库,而且使用也较为简单,受到了很多前端工程师的青睐。本文将着重介绍 Chai 中 should 和 expect 两种断言的用法及区别。

should

should 是 Chai 提供的一种简单的断言风格,它的语法很简单,只需在断言后面加上 .should() 即可。should 风格的代码可读性比较高,可见它作为一种常用的断言风格有其一定的优势。下面是 should 断言的示例:

上述代码简单说明了 should 断言的用法。使用 should 断言时,我们可以调用其一些断言方法,如 should.be.a() 和 should.equal()。其中 should.be.a() 用来检查变量类型,should.equal() 用来检查变量值。

expect

expect 断言风格则相对来说较为复杂一些,其使用方法需要你先调用 expect() 方法,然后才能使用其它方法。但是,expect 的优势在于其在使用时,可读性更强。下面是一个使用 expect 的示例:

上述代码中,我们首先使用 expect() 方法对定义好的变量进行断言,接着我们可以使用 to 关键字来进行其他的断言方法,如 to.be.a() 和 to.equal()。可以看到,与 should 相比,expect 有一些更易记忆的断言方法,如 to.be.true(判断是否为真)、to.be.false(判断是否为假)等。

should 和 expect 的区别

在使用时,should 和 expect 两种断言风格还是有一些区别存在的。下面我们来分别总结一下:

1. 底层实现的不同

  • should:使用 Object.defineProperty() 将断言方法绑定到目标对象的属性上。
  • expect:通过创建 Assertion 对象来实现。同时,expect 断言风格还支持链式调用,链式调用中每次方法调用都会返回一个 Assertion 对象。

2. 值传递的方式不同

  • should: should 断言时不需要传递参数。
  • expect: expect 断言时需要传递参数,并且对传递的参数进行了严格校验(如 expect() 参数只能为 primitive values)。

3. 代码的可读性不同

  • should: should 断言风格的代码可读性较高,容易理解。
  • expect: expect 断言风格的代码使用了更多英文单词,但其链式调用的方式使得代码可读性较好。

总结

Chai 是一个非常优秀的 JavaScript 断言库,其 should 和 expect 两种风格均有其优势。在使用 Chai 进行测试工作时,应该根据需求选择合适的断言风格,并且合理利用其提供的一系列方法,以提高代码的质量和可维护性。

希望本文对你有所启示,更多关于 Chai 断言库的信息和用法可以在官方文档中查看。

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

纠错
反馈