Mocha
Mocha 是用于 Javascript 测试的框架。浏览器和 node 环境都可以使用。
安装
npm install --global mocha
package.json 配置
"scripts": {
"test": "mocha"
}
测试脚本的写法
通常,测试脚本与所要测试的源码脚本同名,但是后缀名为.test.js(表示测试)或者.spec.js(表示规格)。比如,add.js的测试脚本名字就是add.test.js。
var assert = require('assert');
describe('Array', function() {
describe('#indexOf()', function() {
it('should return -1 when the value is not present', function() {
assert.equal([1, 2, 3].indexOf(4), -1);// 预期 [1, 2, 3].indexOf(4) == -1
});
});
});
测试脚本里面应该包括一个或多个describe块,每个describe块应该包括一个或多个it块。
describe块称为"测试套件"(test suite),表示一组相关的测试。第一个参数是测试套件的名称("Array"),第二个参数是一个实际执行的函数。
it块称为"测试用例"(test case),表示一个单独的测试,是测试的最小单位。第一个参数是测试用例的名称("should return -1 when the value is not present"),第二个参数是一个实际执行的函数。
测试
$ npm test
或者
$ mocha test.js
默认测试 test.js 文件里的内容。
两次调用 done() 会报错~
it('double done', function(done) {
// Calling `done()` twice is an error
setImmediate(done);
setImmediate(done);
});
断言库
- should.js:文档好难看懂,但是看例子用起来特别爽,链式调用很强大!
- expect.js
- chai
- better-assert
- unexpected
TDD 和 BDD 的差别
TDD: Test-driven development (测试驱动开发)
是一种使用自动化单元测试来推动软件设计并强制依赖关系解耦的技术。使用这种做法的结果是一套全面的单元测试,可随时运行,以提供软件可以正常工作的反馈。
在编写真正实现功能的代码之前先编写测试,每次测试之后,重构完成,然后再次执行相同或类似的测试。该过程根据需要重复多次,直到每个单元根据所需的规格运行。
个人理解,相当于根据测试用例写代码,每一次提交代码都必须要过一次测试用例,也就是单元测试。
BDD:Behavior-Driven Development (行为驱动开发)
BDD将TDD的一般技术和原理与领域驱动设计(DDD)的想法相结合。 BDD是一个设计活动,您可以根据预期行为逐步构建功能块。
BDD的重点是软件开发过程中使用的语言和交互。
行为驱动的开发人员使用他们的母语与领域驱动设计的语言相结合来描述他们的代码的目的和好处。
使用BDD的团队应该能够以用户故事的形式提供大量的"功能文档",并增加可执行场景或示例。BDD通常有助于领域专家理解实现而不是暴露代码级别测试。它通常以GWT格式定义:GIVEN WHEN&THEN。
个人理解相当于看产品文档以及交互设计稿,从用户故事这个方面检视开发功能。开始有些理解 should.js 的介绍:BDD style assertions for node.js -- test framework agnostic
Karma
Karma的主要目标是为开发人员提供高效的测试环境,他们不必设置大量配置的环境,而是开发人员可以编写代码并从测试中获得即时反馈的地方。
- 在真实环境中测试
- 支持远程控制
- 执行速度快
- 可以跟第三方 IDE 进行交互
- 支持 ci 服务
- 高扩展性,支持插件开发
- 支持调试
Travis CI
构建和测试的自动化工具
Travis CI 提供的是持续集成服务(Continuous Integration,简称 CI)。它绑定 Github 上面的项目,只要有新的代码,就会自动抓取。然后,提供一个运行环境,执行测试,完成构建,还能部署到服务器。