在前端开发中,单元测试是非常关键的环节。而在单元测试中,Chai是一个非常流行的断言库,同时,Chai提供了两种不同的风格:assert(断言)和expect(期望)。那么Chai Assert和Chai Expect在单元测试中有哪些区别呢?本篇文章将会从以下几个方面进行详细的介绍:使用风格、断言方式、错误消息、链式调用和衍生库。
使用风格
Assert风格使用Chai的assert方法(以assert.equal()为例),它通过处理断言结果来返回true或false,代码如下:
const assert = require('chai').assert; describe('测试示例', () => { it('1 应该等于 1', () => { assert.equal(1, 1); }); });
Expect风格使用Chai的expect方法(以expect(1).to.equal(1)为例),它通过链式调用返回一个wrapper对象,代码如下:
const expect = require('chai').expect; describe('测试示例', () => { it('1 应该等于 1', () => { expect(1).to.equal(1); }); });
断言方式
Assert风格使用的是BDD(Behavior-Driven Development)风格的断言,例如assert.equal()、assert.typeOf()等。
Expect风格采用了更加自然语言化的布尔断言,例如expect(a).to.equal(b)、expect(a).to.be.an('object')等。
错误消息
当Chai断言失败时,assert风格将返回一个包含错误消息的Error对象,如下所示:
assert.equal(1, 2); // AssertionError: expected 1 to equal 2
而expect风格则可以提供更加友好的错误消息,如下所示:
expect(1).to.equal(2); // expected 1 to equal 2
当然,你可以通过添加错误消息来覆盖默认错误消息:
expect(1, '这里可以添加错误消息').to.equal(2); // AssertionError: 这里可以添加错误消息: expected 1 to equal 2
链式调用
Expect风格采用链式调用来构建断言,这使得代码看起来更整洁和易读。例如,chai.expect(object).to.have.property('foo').that.is.a('string')中就利用了链式调用。
而assert风格则需要将多个断言作为参数提供,很难保持代码的整洁。例如:
assert.typeOf(foo, 'string'); assert.equal(foo, 'bar');
衍生库
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