在前端开发中,我们经常需要测试异步代码,例如 AJAX 请求、定时器、Promise 等等。但是由于异步代码的特性,测试起来往往比较困难。Chai 是一个 JavaScript 的断言库,它提供了一系列的插件来帮助我们测试异步代码。
安装 Chai
Chai 可以通过 npm 来安装:
npm install chai --save-dev
使用 Chai 插件
Chai 提供了一系列的插件来测试异步代码,包括:
- chai-as-promised:用来测试 Promise。
- chai-spies:用来测试函数是否被调用。
- chai-things:用来测试数组或对象中是否包含某些元素或属性。
- chai-http:用来测试 HTTP 请求。
下面我们来介绍如何使用这些插件。
chai-as-promised
chai-as-promised 可以让我们方便地测试 Promise。例如,我们可以使用 eventually
方法来测试 Promise 是否会 resolve:
// javascriptcn.com 代码示例 const chai = require('chai'); const chaiAsPromised = require('chai-as-promised'); chai.use(chaiAsPromised); const { expect } = chai; describe('Promise', () => { it('should resolve with "hello"', () => { const promise = Promise.resolve('hello'); return expect(promise).to.eventually.equal('hello'); }); it('should reject with an error', () => { const promise = Promise.reject(new Error('oops')); return expect(promise).to.be.rejectedWith('oops'); }); });
chai-spies
chai-spies 可以让我们测试函数是否被调用。例如,我们可以使用 spy
方法来创建一个 spy 函数,并使用 called
方法来测试它是否被调用:
// javascriptcn.com 代码示例 const chai = require('chai'); const chaiSpies = require('chai-spies'); chai.use(chaiSpies); const { expect, spy } = chai; describe('Function', () => { it('should be called', () => { const fn = spy(); fn(); expect(fn).to.have.been.called(); }); it('should be called with arguments', () => { const fn = spy(); fn('hello', 'world'); expect(fn).to.have.been.called.with('hello', 'world'); }); });
chai-things
chai-things 可以让我们测试数组或对象中是否包含某些元素或属性。例如,我们可以使用 include
方法来测试数组或对象中是否包含某个元素或属性:
// javascriptcn.com 代码示例 const chai = require('chai'); const chaiThings = require('chai-things'); chai.use(chaiThings); const { expect } = chai; describe('Array', () => { it('should include 1', () => { const arr = [1, 2, 3]; expect(arr).to.include(1); }); it('should include { id: 1 }', () => { const arr = [{ id: 1 }, { id: 2 }, { id: 3 }]; expect(arr).to.include({ id: 1 }); }); }); describe('Object', () => { it('should have property "name"', () => { const obj = { name: 'Alice', age: 18 }; expect(obj).to.have.property('name'); }); it('should have property "age" with value 18', () => { const obj = { name: 'Alice', age: 18 }; expect(obj).to.have.property('age', 18); }); });
chai-http
chai-http 可以让我们测试 HTTP 请求。例如,我们可以使用 request
方法来发起一个 HTTP 请求,并使用 status
方法来测试响应的状态码:
// javascriptcn.com 代码示例 const chai = require('chai'); const chaiHttp = require('chai-http'); chai.use(chaiHttp); const { expect } = chai; describe('HTTP', () => { it('should return 200', async () => { const res = await chai.request('https://jsonplaceholder.typicode.com') .get('/todos/1'); expect(res).to.have.status(200); }); });
总结
Chai 插件可以帮助我们方便地测试异步代码,包括 Promise、函数、数组或对象以及 HTTP 请求等等。使用 Chai 插件可以让我们的测试更加简洁、可读、可维护。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/6577fcc8d2f5e1655d1ce32b