在进行前端开发中,我们需要进行各种各样的断言(assertion)来保证代码的正确性。Chai 是非常流行的 JavaScript 测试库,它有多种不同的风格的断言方式。本文将对 Chai 的不同风格的断言方式进行分析和比较,以便您能够选择最适合自己的方式来编写测试用例。
Chai 的三种风格
Chai 提供了三种不同的风格来进行断言:
assert
风格:这种风格使用 Node.js 的内置的assert
模块来进行断言。它是最基础的风格,并且不提供任何语法糖。它需要处理错误信息,但是比其他两种风格打印的错误信息更简洁。expect
风格:这是 Chai 提供的基于 BDD(行为驱动开发)的风格。它提供了许多语法糖,可以使代码更加易读和直观。should
风格:这种风格是基于自然语言的,它可以使测试代码像自然语言一样易于阅读。它是最“口语化”的风格。
风格对比
对这三种风格进行详细对比,可以使我们更好地理解它们的优劣。
assert
风格
assert
风格的优点是最简单易懂,语法最为直接。assert 搭配 Mocha 使用时,如果断言出错,则不需要看错误堆栈就可以直接看出错误信息,这可以使调试变得更加简单。
举个例子,如果我们要测试一个加法方法,我们可以编写如下代码:
const assert = require('assert'); function add(x, y) { return x + y; } assert.equal(add(2, 3), 5);
但是,这种风格没有提供太多的语法糖,因此测试代码往往相对较长,并且对于某些错误的描述也不够直观。
expect
风格
expect
风格是基于 BDD 的风格,它提供了类似自然语言的语法糖,可以让代码更具有可读性和可维护性。同时,它还提供了许多强大的特性,比如 .to.be.ok
,可以在某个值为 truthy 时通过测试。
举个例子,如果我们要测试一个加法方法,我们可以编写如下代码:
const expect = require('chai').expect; function add(x, y) { return x + y; } expect(add(2, 3)).to.equal(5);
这段代码更加自然,但有些人可能会觉得这种语法糖有时候太多,因此使代码更难懂。
should
风格
should
风格的好处在于它尽可能地与自然语言匹配,使得测试代码可以像普通语句一样解释。它赋予测试代码更好的可读性和可维护性。
举个例子,如果我们要测试一个加法方法,我们可以编写如下代码:
const should = require('chai').should(); function add(x, y) { return x + y; } add(2, 3).should.equal(5);
如您所见,should 风格的代码相对较少,并且更加像自然语言。但是, many people find that should 风格相对难懂一些。没有熟悉自然语言的人可能会感到困惑。
总结
Chai 提供了多种不同的风格的断言方式,每一种都有其尤为清晰的用例。坚持使用一种特定的风格有助于提高您测试代码的可读性、可维护性和可重用性。关于选择哪种风格,这取决于您个人的编码偏好。使用 assert
风格可以使您清楚地看到错误信息,但是没有那么多语言糖,使用 expect
风格可以使代码易读,但是容易混淆。而使用 should
风格对于熟悉自然语言的人来说会变得更加直观明了,但是对于不畅通英语的人来说可能会感到困惑。您(和您的团队)可以选择适合您的方式来编写测试用例。
示例代码
// javascriptcn.com 代码示例 // assert 风格 const assert = require('assert'); function add(x, y) { return x + y; } assert.equal(add(2, 3), 5); // expect 风格 const expect = require('chai').expect; function add(x, y) { return x + y; } expect(add(2, 3)).to.equal(5); // should 风格 const should = require('chai').should(); function add(x, y) { return x + y; } add(2, 3).should.equal(5);
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/652d37a47d4982a6ebe9fcd4