在前端测试框架中,Chai.js 是一个很受欢迎的断言库,可以与多种测试框架搭配使用,例如 Mocha,Karma,Jest 等等。本篇文章将详细讲解 Chai.js 的常见使用场景及其技巧,并提供示例代码。
安装 Chai.js
使用 NPM 安装 Chai.js:
npm install chai
安装完成后,在测试文件中导入 Chai.js:
const chai = require('chai');
常见使用场景
相等断言
Chai.js 提供了多种相等断言方式,可以用来测试两个值是否相等。
const assert = chai.assert; assert.equal(1, 1, '1 等于 1'); assert.strictEqual(1, '1', '1 和 "1" 值类型不同'); assert.deepEqual({ a: 1 }, { a: 1 }, '两个对象相等'); assert.notStrictEqual(1, true, '1 和 true 类型不同');
布尔断言
Chai.js 还提供了 DSL 方式的布尔断言,例如:
const expect = chai.expect; const foo = 'bar'; const drinks = { tea: ['green', 'black', 'herbal'], coffee: ['latte', 'cappuccino', 'espresso'] }; expect(foo).to.not.equal('baz'); expect(drinks).to.have.property('tea').with.lengthOf(3); expect(drinks).to.have.deep.nested.property('tea[1]', 'black');
异常断言
有时候想要测试代码是否抛出了异常,可以使用 Chai.js 的异常断言:
const assert = chai.assert; assert.throw(() => { throw new Error('抛出一个异常!'); }, Error);
Promise 断言
Chai.js 还支持 Promise 断言,例如:
const assert = chai.assert; assert.isFulfilled(Promise.resolve('成功')); assert.isRejected(Promise.reject(new Error('失败')));
Sinon.js 配合使用
Chai.js 还可以搭配 Sinon.js 使用,例如:
-- -------------------- ---- ------- ----- ----- - ----------------- ----- ------ - ------------ ------------ ------- -- -- - --- ------ ------------- -- - ----- - ---------------------- --- ------------ -- - ---------------- --- ------ ------------ -- -- - ----- -- - ------------ -------------- ----- ---------------- -- -- ----- ------------ ------- --------------------------------- --- ---
技巧详解
使用 .include() 替代 .deep.property()
在许多时候,使用 .include() 比 .deep.property() 更容易:
const obj = { a: { b: { c: 1 } } }; expect(obj).to.include({ a: { b: { c: 1 } } }); // 检查 object 包含任何 key-value 组合 expect(obj).to.deep.include({ a: { b: { c: 1 } } }); // 检查 object 深度包含任何 key-value 组合 expect(obj).to.have.nested.property('a.b.c'); // 检查是否有对应的 key 值
使用 .closeTo() 替代 .equal()
如果要测试浮点数,则应使用 .closeTo() 替代 .equal():
expect(1.5).to.be.closeTo(1, 0.5); // 第三个参数表示容错范围
使用 .any() 替代 .include()
如果不需要查找第一个元素,只需检查数组中是否包含任何元素,请使用 .any():
expect([1, 2, 3]).to.include.any.members([4, 5]);
使用 .a() 或者 .an() 替代 .typeOf() 或 .instanceOf()
Chai.js 提供了 DSL 的语法,使代码更易读:
expect('test').to.be.a('string'); expect(foo).to.be.an.instanceof(Foo);
总结
Chai.js 是测试框架中的一款强大的断言库,可以配合多种测试框架使用,例如 Mocha,Karma,Jest 等等。本篇文章介绍了 Chai.js 的常见使用场景,以及一些技巧,希望对于初学者能提供一些指导意义。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/646474b0968c7c53b0551662