转自http://www.ruanyifeng.com/blog/2015/12/a-mocha-tutorial-of-examples.html

众所周知对于任何一个项目来说,做好单元测试都是必不可少的一项工作。今天在逛CnodeJs社区的时候,无意中看到一篇介绍nodejs测试工具mocha的贴子。于是自己捣鼓了一阵之后,好像还蛮有趣的样子,因此把我摸索入门的过程记录下来跟大家分享一下:

   1、准备工作

  •   先新建一个项目文件夹,命名为simpleTest。
  •   然后在simpleTest文件夹中创建一个名为test的文件夹,将来用来测试的脚本都放在这个文件夹里面

   2、模块安装

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

sudo npm install -g mocha

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

sudo npm install should

   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()这一句,否则测试就会出错,因为测试不等异步函数执行完毕就结束了。

最新文章

  1. Eclipse安装ZooKeeper插件
  2. html()、text()、val()、innerHTML、value()的区分
  3. [转]注释驱动的 Spring cache 缓存介绍
  4. 利用 Excel 公式进行数据整理
  5. js读取解析JSON数据
  6. [Asp.net Mvc]通过UrlHelper扩展为js,css静态文件添加版本号
  7. Oracle DB 备份和恢复的概念
  8. 怎样使用jetty
  9. hbase namespace问题
  10. EMV标准
  11. Android正在使用Handler实现消息分发机制(两)
  12. 结合程序崩溃后的core文件分析bug
  13. iOS-隐藏Navigationbar【导航栏无缝圆滑的隐藏】
  14. C# 截取两个字符串中间的子字符串
  15. 28.TreeSet
  16. 【Android】Android 代码判断当前设备是否为模拟器
  17. jsp/servlet学习四之jsp初窥
  18. Visual Studio 代码片段
  19. (zhuan) 一些RL的文献(及笔记)
  20. 20165211 2017-2018-2 《Java程序设计》第1周学习总结

热门文章

  1. HDU 2841
  2. C/C++拾遗(一):关于数组的指针和数组元素首地址的一道经典题
  3. ubuntu系统AndroidStudio改动内存大小
  4. c#将List<T>转换成DataSet
  5. 模仿百度首页“元宵节汤圆”动图,并实现360°不停旋转(CSS3的animation动画效果)
  6. (转载)Android之三种网络请求解析数据(最佳案例)
  7. Maven配置文件中配置指定JDK版本
  8. SpringCloud学习笔记(19)----Spring Cloud Netflix之服务网关Zuul自定义过滤器
  9. 创建私有CA, 加密解密基础, PKI, SSL
  10. 路飞学城Python-Day12