众所周知对于任何一个项目来讲,作好单元测试都是必不可少的一项工做。今天在逛CnodeJs社区的时候,无心中看到一篇介绍nodejs测试工具mocha的贴子。因而本身捣鼓了一阵以后,好像还蛮有趣的样子,所以把我摸索入门的过程记录下来跟你们分享一下: 一、准备工做html
先新建一个项目文件夹,命名为simpleTest。node
而后在simpleTest文件夹中建立一个名为test的文件夹,未来用来测试的脚本都放在这个文件夹里面 二、模块安装git
首先使用npm以全局方式安装mocha模块:github
sudo npm install -g mocha
而后经过命令行进入到simpleTest文件夹中,安装should模块:npm
sudo npm install should
3简单实例异步
准备工做就绪以后,咱们能够开始来尝试一些简单的实例,看看咱们是如何使用mocha和should.js是进行测试工做的。能够直接先在项目根目录下执行mocha命令,看看有什么状况发生,执行后的结果以下图所示:函数
运行了,可是什么都没有发生。由于mocha扫描了test文件夹,没有发现能够执行的测试脚本文件。下面咱们往test目录中添加一个名为test.js的测试文件,代码以下:工具
require("should"); var name = "zhaojian"; describe("Name", function() { it("The name should be zhaojian", function() { name.should.eql("zhaojian"); }); }); var Person = function(name) { this.name = name; }; var zhaojian = new Person(name); describe("InstanceOf", function() { it("Zhaojian should be an instance of Person", function() { zhaojian.should.be.an.instanceof(Person); }); it("Zhaojian should be an instance of Object", function() { zhaojian.should.be.an.instanceof(Object); }); }); describe("Property", function() { it("Zhaojian should have property name", function() { zhaojian.should.have.property("name"); }); });
而后从新执行mocha命令,获得的结果以下:单元测试
能够看到控制台上已经显示四个测试用例都成功经过了。若是有测试用例没有经过的话,例如咱们加上判断name是否是等于epson的语句,控制台的显示以下:测试
控制台中的信息会明确地告诉咱们有多少个测试用例没有经过,而且指出没有经过的测试用例是在哪一个模块中的哪一个单元。
接下来咱们来分析一下以前的代码,首先为了使用should.js的断言库,在代码的开头部分必须引入should模块,可是mocha模块则无需显式引入。
每个describe语句均可以看做是一个测试模块,它只是起着划分各个模块部分的做用,describe语句的第一个参数就是对该模块的描述。
在describe语句中的it语句才是测试的主体部分,每个it语句都是一个测试单元,一个测试模块中能够有不少个测试单元。it语句的第一个参数的做用就是描述该单元的测试任务或要求,以便在测试用例数量较多时能够清楚地知道究竟有哪些功能的测试没有经过。
在it语句的回调函数中就能够经过书写should.js断言库中的语句进行测试了。should模块是assert模块的扩展,它的语法能够在上面的代码中看到,都是相似zhaojian.should.be.an.instanceof(Person) 这样的,跟咱们平常用的语法几乎如出一辙, 很是易于使用。因为篇幅的关系,我只在前面举了一些简单的例子,有关更多should.js的用法能够参考这里的文档: https://github.com/visionmedia/should.js。另外mocha也能够与其余的第三方断言库搭配使用,在这里就不过多介绍了,有兴趣的话能够本身去看。接下来将介绍如何对异步函数进行测试的例子。
四、异步测试
接下来为了进行异步测试,在test目录下建立一个名为testReadFile.js的文件,代码以下:
var fs = require("fs"); require("should"); describe("readFile", function() { it("The file content should be zhaojian", function(done) { fs.readFile("text.txt", "utf8", function(err, data) { data.should.eql("zhaojian"); done(); }); }); });
再建立一个名为text.txt的文本文件,其内容以下:
执行mocha命令进行测试,结果以下:
观察上面的代码,有一点必须注意的是:在进行异步测试的时候,it语句的回调函数会带有一个参数done。咱们必须在要测试的异步函数的回调函数的最后加上done()这一句,不然测试就会出错,由于测试不等异步函数执行完毕就结束了。