Node.js 常用测试框架 mocha, should, istanbul
Point
- 学习使用测试框架 mocha
- 学习使用断言库 should
- 学习使用测试率覆盖工具 istanbul
- 简单 Makefile 的编写 http://blog.csdn.net/haoel/article/details/2886
begin
定义 fibonacci 函数,此函数的定义为 int fibonacci(int n)
- 当 n === 0 时,返回 0;n === 1时,返回 1;
- n > 1 时,返回 fibonacci(n) === fibonacci(n-1) + fibonacci(n-2),如 fibonacci(10) === 55;
- n 不可大于10,否则抛错,因为 Node.js 的计算性能没那么强。
- n 也不可小于 0,否则抛错,因为没意义。
- n 不为数字时,抛错。
|
|
执行命令
|
|
测试驱动开发
在 fibonacci.js
同级目录下添加 /test/fibonacci.test.js
|
|
安装全局的 mocha
|
|
-g
与 非-g
的区别,就是安装位置的区别,g
是global
的意思。如果不加的话,则mocha
安装 在项目目录下面;如果加了,则这个mocha
是安装在全局的,如果mocha
有可执行命令的话,那么这个命令也会自动加入到你系统 $PATH
中的某个地方。
执行测试:
|
|
describe & it
describe
中的字符串,用来描述你要测的主体是什么;it
当中,描述具体的case
内容。
引入的should
模块,是个断言库。在Node.js
中,使用mocha
和should
在协作完成断言测试。should
在js
的Object “基类”上注入了一个#should
属性,这个属性中,又有着许许多多的属性可以被访问。
比如测试一个数是不是大于3,则是(5).should.above(3);
测试一个字符串是否有着特定前缀:'foobar'.should.startWith('foo');
。should.js API
在:https://github.com/tj/should.js
还有另外一个断言库 expect
- 新增一个
case
内容
|
|
再次运行的时候,该case
未跑通;
- 更新
fibonacci
实现
添加对参数的判断
|
|
再跑一次$ mocha
就过了。这就是测试驱动开发:先把要达到的目的都描述清楚,然后让现有的程序跑不过 case,再修补程序,让 case 通过。
测试覆盖率
安装
istanbul : $ npm i istanbul -g
执行
$ istanbul cover _mocha
这会比直接使用mocha
多了覆盖率的输出!
- 查看测试详情
打开 /coverage/lcov-report/index.html
文件查看;
over
mocha
和istanbul
的结合是相当无缝的,只要mocha
跑得动,那么istanbul
就接得进来。
- mocha 和 istanbul 版本依赖问题
假设你有一个项目A,用到了 mocha 的 version 3,其他人有个项目B,用到了 mocha 的 version 10,那么如果你 npm i mocha -g 装的是 version 3 的话,你用 $ mocha 是不兼容B项目的。因为 mocha 版本改变之后,很可能语法也变了。
这时,跑测试用例的正确方法,应该是
每次输入这个很麻烦,所以我们要引入Makefile
,让Makefile
帮我们记住复杂的配置。
|
|
这时,我们只需要调用make test
或者make cov
,就可以跑我们相应的测试了。
关于Makefile