随着互联网的发展以及使用 JavaScript 开发项目的增多,前端测试已经成为了不可或缺的一个环节,特别是单元测试。通过单元测试,可以确保代码的质量、可重用性和稳定性。而本文将会介绍如何使用 Mocha 和 Chai 进行 Node.js 的单元测试。
Mocha 简介
Mocha 是一个 JavaScript 的测试框架,可以用于测试异步代码以及同步代码。它支持许多类库和断言风格。Mocha 在 Node.js 和浏览器中都可以使用。
安装 Mocha
首先,我们需要安装 Mocha,可以通过 npm 进行安装:
npm install mocha --save-dev
接着,在 package.json 文件中,我们需要增加一个测试命令如下:
-- -------------------- ---- ------- - ------- ------------- ---------- -------- ---------- - ------- ------- -- ------------------ - -------- -------- - -展开代码
然后,在项目文件夹下运行 npm test
命令,即可执行测试。
编写测试
接下来,我们将会介绍如何编写测试。
同步代码的测试
我们首先来看如何对同步代码进行测试,在这里我们将会对一个加法函数进行测试。先创建一个名为 add.js 的文件,包含以下代码:
function add(a, b) { return a + b; } module.exports = add;
接着,我们来写一个测试用例,创建一个名为 add.test.js 的文件,包含以下代码:
const add = require('./add'); const assert = require('assert'); describe('add function', function() { it('should return 3 when the inputs are 1 and 2', function() { assert.equal(add(1,2), 3); }); });
接着,我们运行 npm test
命令,测试将通过。
异步代码的测试
接着,我们将会介绍如何测试异步代码,在这里我们将会使用 setInterval 函数,在每 100 毫秒打印一次数字 0 到 3,一共打印 4 次。可以创建一个名为 timer.js 的文件,包含以下代码:
-- -------------------- ---- ------- -------- -------------------- - --- ----- - -- ----- ---------- - -------------- -- - ------------------ -- ------ - -- - -------------------------- - -- ----- - -------------- - -----------展开代码
接着,我们来写一个测试用例,创建一个名为 timer.test.js 的文件,包含以下代码:
-- -------------------- ---- ------- ----- ---------- - ------------------- ----- ------ - ------------------ --------------- ---------- ---------- - ---------- ----- ------- ---- --- ------------ ------- -------------- - --- ------------- - -- -------------------------------- - ------------------------- ----------------- -- -------------- - -- - ------- - --- --- ---展开代码
在这里我们使用了 Mocha 的 done() 回调函数来标记测试完成。如果测试完成,done() 就会被调用。
Chai 简介
Chai 是一个强大的断言库,它提供了多种断言风格,包括 BDD(行为驱动开发)和 TDD(测试驱动开发)。Chai 的语法简单易懂,可以与 Mocha 很好地搭配使用。
安装 Chai
我们需要通过 npm 进行安装,输入以下命令即可:
npm install chai --save-dev
编写测试
接下来,我们将会介绍如何使用 Chai 来进行断言。
BDD 断言
我们首先来看 BDD 断言的用法。在这里,我们需要首先选用 BDD 断言,即它提供的 expect() 模式。在这个例子中,我们使用了验证目标代码是否返回了一个对象。
const expect = require('chai').expect; const foo = { bar: 'baz' }; describe('chai expect', function() { it('should return an object', function() { expect(foo).to.be.an('object'); }); });
TDD 断言
接着,我们将会学习 TDD 断言的用法。在这个例子中,我们选择了 TDD 断言模式即使用 assert。
const assert = require('chai').assert; const foo = 'bar'; describe('chai assert', function() { it('should return a string', function() { assert.typeOf(foo, 'string'); }); });
高级用法
最后,我们将会通过一个例子来学习一下更加高级的用法。
在这个例子中,我们将会测试一个异步函数。首先,让我们写一个异步函数和一个对应的测试用例:
-- -------------------- ---- ------- -------- ----------------- - --------------------- - -------------- -- ------ - --------------- --- ---- ---------- ---------- - ---------- ------ ------- ----- - -------- -------------- - ---------------------------- - --------------------------------- ------- --- --- ---展开代码
但是,这个例子中有一个问题:我们无法捕获回调函数中的错误。在这里,我们可以使用 Chai 的 eventually() API,用于提供一个更好的方式来测试异步函数。
describe('Mocha and Chai advanced', function() { it('should return success after 1 second', function() { return asyncFunction().should.eventually.equal('success'); }); });
在这里,我们将会捕获回调函数中的错误,使得测试更加完整。
总结
本文介绍了 Mocha 和 Chai 的基础及高级用法,并通过多个例子讲解了这些知识点的使用方法。测试是编写高质量可维护代码的重要组成部分,希望这篇文章对你有所帮助。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/65b9deb7add4f0e0ff268f74