node测试框架:mocha+should.js

对于任何一个项目来说,单元测试都是必不可少的一项工作。nodejs也是一样。

  关于js的测试框架有很多,最终我选择了mocha。

  Mocha项目地址:http://visionmedia.github.com/mocha/

  should项目地址:https://github.com/visionmedia/should.js

相比其他测试框架,它有以下几个优点:

  • 与nodejs结合更自然(它支持浏览器和node端测试。)
  • 可使用多种风格的DSL,比如should/expect等
  • 异步方法测试简单
  • 支持before,after(即beforeAll/afterAll)

下面是安装使用过程

 1、模块安装

  首先使用npm以全局方式安装mocha模块:

sudo npm install-g mocha

  然后通过命令行进入到simpleTest文件夹中,安装should模块:

sudo npm  install  should

 2、

[root@localhost nodejs]# mkdir test

vi test.js

编辑test.js

   3、简单实例

  准备工作就绪之后,我们可以开始来尝试一些简单的实例,看看我们是如何使用mocha和should.js是进行测试工作的。可以直接先在项目根目录下执行mocha命令,看看有什么情况发生,执行后的结果如下图所示:

  

  运行了,但是什么都没有发生。因为mocha扫描了test文件夹,没有发现可以执行的测试脚本文件。下面我们往test目录中添加一个名为test.js的测试文件,代码如下:

复制代码

复制代码

 1 require("should");
 2 
 3 var name = "zhaojian";
 4 
 5 describe("Name", function() {
 6     it("The name should be zhaojian", function() {
 7         name.should.eql("zhaojian");
 8     });
 9 });
10 
11 var Person = function(name) {
12     this.name = name;
13 };
14 var zhaojian = new Person(name);
15 
16 describe("InstanceOf", function() {
17     it("Zhaojian should be an instance of Person", function() {
18         zhaojian.should.be.an.instanceof(Person);
19     });
20 
21     it("Zhaojian should be an instance of Object", function() {
22         zhaojian.should.be.an.instanceof(Object);
23     });
24 });
25 describe("Property", function() {
26     it("Zhaojian should have property name", function() {
27         zhaojian.should.have.property("name");
28     });
29 });

复制代码

复制代码

然后重新执行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也可以与其他的第三方断言库搭配使用,在这里就不过多介绍了,有兴趣的话可以自己去看。接下来将介绍如何对异步函数进行测试的例子。

   4、异步测试  

  接下来为了进行异步测试,在test目录下创建一个名为testReadFile.js的文件,代码如下:

复制代码

复制代码

 1 var fs = require("fs");
 2 require("should");
 3 
 4 describe("readFile", function() {
 5     it("The file content should be zhaojian", function(done) {
 6         fs.readFile("text.txt", "utf8", function(err, data) {
 7             data.should.eql("zhaojian");
 8             done();
 9         });
10     });
11 });

复制代码

复制代码

  再创建一个名为text.txt的文本文件,其内容如下:

  

  执行mocha命令进行测试,结果如下:

  

  观察上面的代码,有一点必须注意的是:在进行异步测试的时候,it语句的回调函数会带有一个参数done。我们必须在要测试的异步函数的回调函数的最后加上done()这一句,否则测试就会出错,因为测试不等异步函数执行完毕就结束了。

延伸阅读


▶ Walkthrough007

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值