不写测试的项目都是耍流氓
BDD
和TDD
的差别: The Difference Between TDD and BDD
测试框架:
mocha
Mocha是一个基于node.js和浏览器的集合各种特性的Javascript测试框架,并且可以让异步测试也变的简单和> 有趣。Mocha的测试是连续的,在正确的测试条件中遇到未捕获的异常时,会给出灵活且准确的报告。
辅助工具
- should.js (BDD)
- chai(支持assert,should,expect)
- supertest (接口测试,代替浏览器地址请求,十分方便)
一个典型的mocha例子:
|
|
beforeEach
会对当前describe
下的所有子case
生效。before
和after
的代码没有特殊顺序要求。- 同一个
describe
下可以有多个before
,执行顺序与代码顺序相同。 - 同一个
describe
下的执行顺序为before
,beforeEach
,afterEach
,after
- 当一个
it
有多个before
的时候,执行顺序从最外围的describe
的before
开始,其余同理。
1.describe (moduleName, testDetails)
表示测试套件
(test suite),表示一组相关的测试。它是一个函数,可以嵌套,第一个参数moduleName
是测试套件的名称(可随意命名,一般描述测试内容),第二个参数testDetails
是一个实际执行的函数。
2.it (info, function)
块称为测试用例
(test case),表示一个单独的测试,是测试的最小单位。它也是一个函数,第一个参数info
是测试用例的名称,第二个参数function
是一个实际执行的函数。
3.done()
按照瀑布流编程习惯,取名done是表示你回调的最深处,也就是结束写嵌套回调函数。但对于回调链来说done实际上意味着告诉mocha从此处开始测试,一层层回调回去。此外,一个测试用例下(也就是一个it)里面只能调用一次done。
4.使用命令mocha --recursive
执行当前目录下所有的测试用例(包括子目录)
supertest使用
supertest
可以用来测试nodejs项目中的Restful API,也就是,我们不需要在浏览器中输入请求地址测试。
详细看说明文档,下面代码简单介绍:
使用gulp自动化测试
1、安装插件:
- gulp
- gulp-watch
- gulp-mocha
2、添加Gulpfile.js
文件
|
|
3、运行监听测试文件改动,只要改动就会自动执行测试。
gulp
测试覆盖率
在github上的项目大都有如图所示标志:
下面介绍如何使用Istanbul With Mocha
生成测试覆盖率
需要安装的插件有:
1、在package.json
文件中的script属性下加入npm自定义命令mocha
和cov
:
|
|
mocha命令意思是执行测试的语句,cov命令是生成测试覆盖命令,具体可以查看coveralls文档
2、使用github账号登录travis-ci.org
站点,添加pro
在本地项目根目录中创建.travis.yml
文件
3、同样使用github账号登录coveralls.io
,添加该pro,然后进入SET UP COVERALLS页
可以看到教程,选择第一个将代码复制到.coveralls.yml
文件中(同样是在根目录创建)
4、最后push提交代码到github,在travis-ci查看项目是否自动部署成功,失败的话点击查看详细日记信息,根据失败信息解决问题即可。之后每次项目提交代码后,travis-ci上都会自动building项目。
5、成功后,将项目相应结果图片放到Readme.md下
[![Build Status](https://travis-ci.org/giscafer/Vue-order.svg?branch=master)](https://travis-ci.org/giscafer/Vue-order)
[![Coverage Status](https://coveralls.io/repos/github/giscafer/Vue-order/badge.svg?branch=master)](https://coveralls.io/github/giscafer/Vue-order?branch=master)
如项目效果:https://github.com/giscafer/Vue-order
推荐几篇不错的文章:
测试框架 Mocha 实例教程
初识 mocha in NodeJS
Nodejs开源项目里怎么样写测试、CI和代码测试覆盖率