测试用例: mocha, should, istanbul
第六课, 原文链接Node.js-lesson6
目标
建立lesson6项目,编写代码
main.js: 其中有个fibonacci函数.fibonacci的介绍详见维基百科,中文名 斐波那契
此函数的定义为int fibonacci(int n)
- 当 n === 0 时,返回0; n === 1 时,返回1
- n > 1 时,返回
fibonacci(n) = fibonacci(n - 1) + fibonacci(n-2)
,如fibonacci === 55
- n不能大于10,否则抛错,因为Node.js的计算性能没那么强,到此为止
- n也不能小于0,否则抛错,因为没意义
- n不为数字时,抛错
test/main.test.js: 对main函数进行测试,并使行覆盖率和分支覆盖率都达到100%
知识点:
- 学习使用测试框架 mocha
- 学习使用断言库 should
- 学习使用测试率覆盖工具 istanbul
- 简单Makefile的编写
课程内容
$ npm init
初始化项目
编辑 main.js,编写 fibonacci
函数
1 | // file main.js |
执行 $ node main.js 10
运行
接下来开始测试驱动开发,我们先得把main.js里面的fibonacci暴露出来,这个简单
加上exports.fibonacci = fobonacci;
(我承认,我看不懂,我还需要补充基础知识)
然后在test/main.test.js
中引用我们的main.js,开始一个简单的测试
1 | // file: test/main.test.js |
测试之前,需要使用npm install should --save
安装should这个外部模块
然后安装一个全局的mocha:$ sudo npm install mocha -g
执行:$ mocha
should模块是一个断言库,mocha和should协作完成测试
should在Javascript的Object’基类’上注入了一个#should
属性,这个属性又带有许许多多的属性可以访问
比如测试一个数是不是大于3,则是(5).should.above(3)
,测试一个字符串是否有着特定的前缀:'foobar'.should.startWith('foo');
,should.js API
should.js 如果现在还是 version 3 的话,推荐大家去看看它的 API 和 源码;现在 should 是 version 4 了,API 丑得很,但为了不掉队,我还是一直用着它.我觉得 expect 麻烦,所以不用 expect,对了,expect 也是一个断言库:https://github.com/LearnBoost/expect.js/.
记得fibonacci函数的几个要求吗?
1 | * 当 n === 0 时,返回0; n === 1 时,返回1 |
现在就让我们学习使用测试用例来描述一下这几个要求,更新后的main.test.js:
1 | // file test/main.test.js |
执行$ mocha
,上图,没通过:
现在我们只能修改fibonacci的实现了:
1 | // file main.js |
再次执行$ mocha
,就过了.我也是现在才知道这就是传说中的测试驱动开发:
先把要达到的目的都描述清楚,然后让现有的程序跑不过case,再修补,让case通过.
安装一个istanbul:$ sudo npm install istanbul -g
执行$ istanbul cover _mocha
会看到比直接使用mocha命令多一些输出内容,而且很生成一些文件
Branches:分支覆盖率 Statements:行覆盖率
使用命令打开$ open coverage/lcov-report/index.html
其实测试的覆盖率是100%的,但是23、24这两行无法测试
mocha和istanbul是无缝结合的,只要能使用mocha测试,那么就能配合istanbul测试
剩下的就是需要说明版本兼容问题,程序都是向下兼容,低版本肯定跑不起高版本的一些东西
假设你有一个项目A,用到了 mocha 的 version 3,其他人有个项目B,用到了 mocha 的 version 10,那么如果你 $ sudo npm install mocha -g
装的是 version 3 的话,你用 $ mocha 是不兼容B项目的.因为 mocha 版本改变之后,很可能语法也变了,对吧.
这时,跑测试用例的正确方法,应该是:
$ npm install mocha --save-dev
,装个 mocha 到项目目录中去$ ./node_modules/.bin/mocha
,用刚才安装的这个特定版本的 mocha,来跑项目的测试代码.
./node_modules/.bin 这个目录下放着我们所有依赖自带的那些可执行文件(该目录为隐藏目录$ ls -a
可查看)
每次输入这个很麻烦对吧?所以我们要引入 Makefile,让 Makefile 帮我们记住复杂的配置.
1 | test: |
这个时候,只需要调用$ make test
或者$ make cov
,就可以测试了
Makefile学习链接: http://blog.csdn.net/haoel/article/details/2886