Javascript中的单元测试(JEST)

首先看下百度百科中关于单元测试的定义。

单元测试(unit testing),是指对软件中的最小可测试单元进行检查和验证。对于单元测试中单元的含义,一般来说,要根据实际情况去判定其具体含义,如C语言中单元指一个函数,Java里单元指一个类,图形化的软件中可以指一个窗口或一个菜单等。总的来说,单元就是人为规定的最小的被测功能模块。单元测试是在软件开发过程中要进行的最低级别的测试活动,软件的独立单元将在与程序的其他部分相隔离的情况下进行测试。

在很多静态语言开发软件的过程中,单元测试已经成为了其保证程序正确运行密不可分的一部分了。尤其在一些敏捷开发过程中,用测试来驱动开发更是屡见不鲜。但是对前端的javascript程序员来说,似乎单元测试用得并不多。但是,现在node的盛行,es6的普及,以及各种强大框架的慢慢出现,使得前端人员对于js代码的单元测试逐渐更加的需要。

这里我只是简单的说一个最近我使用过的js单元测试框架。或许已经有人用了,或许有人还不是很了解。

JEST

Jest 是Facebook的一个专门进行Javascript单元测试的工具,之前仅限他们的前端工程师在公司内部使用,后来开源出来,它是在Jasmine测试框架上演变开发而来。

Jest来自facebook,使用的方法也很简单,我们直接从案例来看:

image

1.安装

这是官方网站上给出的教程。但是在第一步npm install的时候,我们应该安装jest-cli,不然在后面的学习的过程中,你会发现npm test根本就跑不起来。

完整的安装命令: npm install –save-dev jest-cli

2.编写测试单元与测试用例

现在我们就用官方的示例来作学习,安装完成后,我们在根目录下简历我们的第一个文件,sum.js:

1
2
3
4
5
6

var sum = function(a,b){
return a+b
}

module.exports = sum;

这是我们需要测试的模块,当然,现在看起来是一个很简单的功能,就是输出两个数的和。有了我们需要测试的模块之后,我们开始编写测试用例。jest的测试用例需要在tests这个文件夹的目录下执行,所以我们接下来是新建一个名为tests的目录。

然后开始写我们的测试用例,sum-test.js

1
2
3
4
5

test('adds 1+2 to equal 3',()=>{
const sum = require('../sum');
expect(sum(1,2)).toBe(3);
});

这里的 “()=>{}”和const是es6里面的闭包和定义常量的语法,如果不是很明白可以替换为:

1
2
3
4
5
6

test('adds 1+2 to equal 3',function(){
var sum = require('../sum');
expect(sum(1,2)).toBe(3);
expect(sum(2,8)).toBe(10);
});

同样没有问题。

3.进行测试

有了测试用的单元和测试用例之后,我们就可以开进行单元测试了。这里我们还要进行一些配置。我们打开package.json,然后在里面加上:

1
2
3
4

"scripts": {
"test": "jest"
}

然后我们在命令行界面输入npm test 即可看到运行结果了

image

小提示:每个test为一个单独的测试用例,如果我们需要进行多个值的测试,我们需要编写多个test,如:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

test('adds 1+2 to equal 3',function(){
var sum = require('../sum');
expect(sum(1,2)).toBe(3);
expect(sum(2,8)).toBe(10);
});

test('adds 2+8 to equal 10',function(){
var sum = require('../sum');
expect(sum(2,8)).toBe(10);
});

test('adds -2+8 to equal 10',function(){
var sum = require('../sum');
expect(sum(-2,8)).toBe(10);
});

然后看输出结果:

image

第三个明显不符合我们的要求,这里我们就可以检查,是测试单元错误了,还是我们的期望值写错了。这样就可以大大的提高我们的代码正确率。

好了,以上就是关于jest的简单介绍。但jest的功能不仅限于此,官网上还有其对es6,对react的集成,以及对代码覆盖率的测试案例,如果有兴趣,可以自己慢慢去研究。

最后放一个代码仓库,您可以直接将项目下载到本地,用npm install安装所有的依赖,然后用npm test来运行测试。

仓库地址