Chai Assert vs Expect:在单元测试中有什么区别?

在前端开发中,单元测试是非常关键的环节。而在单元测试中,Chai是一个非常流行的断言库,同时,Chai提供了两种不同的风格:assert(断言)和expect(期望)。那么Chai Assert和Chai Expect在单元测试中有哪些区别呢?本篇文章将会从以下几个方面进行详细的介绍:使用风格、断言方式、错误消息、链式调用和衍生库。

使用风格

Assert风格使用Chai的assert方法(以assert.equal()为例),它通过处理断言结果来返回true或false,代码如下:

Expect风格使用Chai的expect方法(以expect(1).to.equal(1)为例),它通过链式调用返回一个wrapper对象,代码如下:

断言方式

Assert风格使用的是BDD(Behavior-Driven Development)风格的断言,例如assert.equal()、assert.typeOf()等。

Expect风格采用了更加自然语言化的布尔断言,例如expect(a).to.equal(b)、expect(a).to.be.an('object')等。

错误消息

当Chai断言失败时,assert风格将返回一个包含错误消息的Error对象,如下所示:

而expect风格则可以提供更加友好的错误消息,如下所示:

当然,你可以通过添加错误消息来覆盖默认错误消息:

链式调用

Expect风格采用链式调用来构建断言,这使得代码看起来更整洁和易读。例如,chai.expect(object).to.have.property('foo').that.is.a('string')中就利用了链式调用。

而assert风格则需要将多个断言作为参数提供,很难保持代码的整洁。例如:

衍生库

Chai有很多衍生库,为不同的应用场景提供了更多的功能和特性,例如:

  • chai-as-promised:用于Promise的断言;
  • chai-fuzzy:针对模糊性进行的断言;
  • chai-subset:采用子集断言来比较对象的部分属性等。

总结:

在单元测试中,Chai是一个非常流行的断言库。 Assert和Expect是Chai提供的两种不同的风格,Assert风格使用Chai的assert方法,而Expect风格则是采用链式调用返回一个wrapper对象。两者在断言方式、错误消息和链式调用方面有不同。同时,Chai还有很多衍生库,扩展了Chai的功能和特性,为不同的应用场景提供了更多的断言方式。

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/65420c5e7d4982a6ebbb1c56


纠错
反馈