mocha测试JavaScript代码教程

Mocha诞生于2011年,是现在最流行的JavaScript测试框架之一,在浏览器和Node环境都可以使用。它是一个富特征的JavaScript测试框架。基于node.js和浏览器内置对象。

本文全面介绍如何使用Mocha,让你轻松上手。如果你以前对测试一无所知,本文也可以当作JavaScript单元测试入门。值得说明的是,除了Mocha以外,类似的测试框架还有Jasmine、Karma、Tape等,也很值得学习。

###1 首先,我们先来快速体验一下最简单的JavaScript单元测试使用。
1 你的电脑请先安装好node.js。
2 打开cmd终端。进入node.js的根目录下,执行以下代码
首先我们要全局安装Mocha:

1
2
3
4
npm install -g mocha      
```

3 接下来,我们为我们的项目创建一个新的文件夹并在其中运行下面的代码:

npm install chai

1
2
3
4
5
   
4上面的代码将会在我们的项目中安装一个Chai的本地副本。接着,我们需要在项目目录下创建一个叫做test的文件夹,它用作Mocha默认的测试路径。所有的测试代码请放在这个test下面。
在同样新建一个lib文件夹,所有的被测代码都放在这个lib下。然后,我们需要明白一个概念就是TDD,简介在[这里](https://baike.baidu.com/item/%E6%B5%8B%E8%AF%95%E9%A9%B1%E5%8A%A8%E5%BC%80%E5%8F%91/3328831?fr=aladdin) ,利用TDD测试,我们必须要明白TDD的是我们只编写测试通过的功能代码,这样减少编码量。

接下来,我们按照TDD规则,先编写测试代码。当然,我们模拟的都是及其简单的方法。这里是测试lib文件下的tags.js文件(读者请自已建造)中暴露的parse方法。

var expect =require(‘chai’).expect; //引入我们需要chai断言库
var tags=require(“../lib/tags”);//这是引入的被测代码,在后面会给出
describe(‘Tags’, function () {
describe(‘#parse()’, function () {
it(‘should parse long formed tags’, function () {
var results = tags.parse();
expect(results).equal(4);

    });

});

}
);

1
2
5通过以上代码我们知道,它构造一个Tags的describe(组件),这个组件随开发人员定义,并在里面嵌套一个测试parse方法的describ(组件)。并在里面放入了真正要测试的测试用例。参数为测试说明和回调函数。  
对于我们而言,Mocha只关心项目结构,对实现以及结果则不太关注,所以我们只需要明白这种结构定义,以及如何使用它,下面我们编写被测试代码。

在lib下新建tags.js文件。放入以下代码
exports = module.exports = {};

exports.parse = function(){

var result=4;
return result;

}

1
2
6以上代码就是我们要测试的代码,我们向外暴露了parse接口,方便测试代码进行调用。我们在终端输入mocha,便可以发现测试通过,这样一个简单的js测试用例便搭建完毕。通常,测试脚本与所要测试的源码脚本同名,但是后缀名为.test.js(表示测试)或者.spec.js(表示规格)。比如,add.js的测试脚本名字就是add.test.js。我们这里并没有严格按照惯例,仅仅作为示例使用。
这些代码将会基于它们所在的describe块运行,你甚至可以使用beforeEach或者afterEach函数来让它们在所有的it块之前或之后运行。这些函数本身仅仅是使用了标准的Node命令来创建或移除文件。让我们再来看看如何使用before以及after吧。

var expect =require(‘chai’).expect;
var tags=require(“../lib/tags”);

describe(‘Tags’, function () {

describe('#parse()', function () {

    before(function() {
        console.log("本条测试开始!"+1);
    });
    beforeEach(function(){
        console.log("每个it测试我都会执行"+2);
    });
    it('should parse long formed tags', function () {

        var results = tags.parse();  
        expect(results).equal(4);

    });
    after(function() {
        console.log("本条测试完成了"+3);
   });
   afterEach(function(){
    console.log("每个it执行我都要执行"+4);
   });
});

}
);
//我们会看到控制台输出
// Tags
// #parse()
//本条测试开始! 1
//每个it我都要执行 2
// √ should parse long formed tags
//每个it执行我都要执行下 3
//本条测试完成了 4

1
2
3
4
5
6

###2 异步测试用例
我们在测试前台js会经常遇到一些涉异步回调函数的测试。那么如何测试它们呢?Mocha已经给出了很好的方案。

我们只需要在用例函数里边加一个done回调函数(无需定义),异步代码执行完毕后调用一下done,就可以通知mocha,已经执行完毕,去执行下一个用例函数吧!
就像下面这样:

describe(‘User’, function() {
describe(‘#save()’, function() {
it(‘should save without error’, function(done) {
var user = new User(‘Luna’);
user.save(function(err) {
if (err) throw err;
done();
});
});
});
});
`
这里我们测试了user对象的save异步方法。等待它执行完毕后,我们调用Mocha的done函数就会通知Mocha本测试用例跑完了,直接跑下一个。

鲍志强 wechat
欢迎你扫一扫上面的微信公众号,订阅我的博客!
你的点赞是为了你的未来