测试驱动开发(TDD)是一种主要的敏捷开发技术。它最强大之处是可以提升代码的质量,改进错误的检查方式,以及增强程序员的信心,使其获得更有效率的开发手段。
纵观历史,Web应用已经越来越难以自动测试,开发者们严重依赖手动测试。但其实,一些特定的项目,比如独立的服务和REST API可以且必须用TDD来测试。同时,富用户界面应用也可以用PhantomJS这种无界面浏览器来进行测试。
行为驱动开发(BDD)的概念是基于TDD的。它鼓励产品负责人与开发者合作,这一点在语言上不同于TDD。
测试框架Mocha:
3.1 安装与理解Mocha
$ npm install mocha@1.16.2
$ ./node_modules/mocha/bin/mocha test_name
TDD主要的思想:定义一个单元测试、执行这个单元测试、验证这个测试是否通过;
BDD是TDD的一个专业版本,它指定了从业务需求的角度出发需要哪些单元测试。
虽然,使用assert模块来写测试也是可行的,但用Mocha测试框架来实现TDD和BDD会更好。如下:获取测试报告、支持异步模式和丰富的可配置项。
$ mocha app.js -R nyan //测试报告
理解Mocha的hook机制:当特定的事件触发时hook才执行。测试函数中加上done参数
3.2 用assert(断言)进行测试驱动开发
用assert进行TDD:
test.js
var assert = require('assert')
describe('String#split', function(){
it('should return an array', function() { //使用it方法测试是否有数组
assert(Array.isArray('a,b,c'.split(',')));
})
})
$ mocha test
断言库Chai:npm install chai@1.8.1
3.3 用Expect.js进行行为驱动开发
用Expect.js进行BDD:npm install expect.js@0.2.0
Expect.js的语法:
3.4 项目:为博客写第一个BDD测试
不进行UI测试,但可以发送几个HTTP请求,然后解析从应用程序REST端返回的响应数据。
$ mkdir tests
tests/index.js
将配置参数写入Makefile: