教程:https://cnodejs.org/topic/516526766d38277306c7d277
看着挺爽的。
//同步
var assert = require(‘assert‘);
describe(‘Array‘, function(){
describe(‘#indexOf‘, function(){
it(‘should return -1 when the value is not present‘, function(){
assert.equal(-1, [1,2,3].indexOf(5));
assert.equal(-1, [1,2,3].indexOf(0));
})
})
})
describe (moduleName, testDetails)
由上述代码可看出,describe是可以嵌套的,比如上述代码嵌套的两个describe就可以理解成测试人员希望测试Array模块下的#indexOf() 子模块。
module_name 是可以随便取的,关键是要让人读明白就好。
it (info, function)
具体的测试语句会放在it的回调函数里,一般来说info字符串会写期望的正确输出的简要一句话文字说明。
当该it block内的test failed的时候控制台就会把详细信息打印出来。
一般是从最外层的describe的module_name开始输出(可以理解成沿着路径或者递归链或者回调链),最后输出info,表示该期望的info内容没有被满足。
一个it对应一个实际的test case
assert.equal (exp1, exp2)
断言判断exp1结果是否等于exp2, 这里采取的等于判断是== 而并非 === 。即 assert.equal(1, ‘1’) 认为是True。
这只是nodejs里的assert.js的一种断言形式,下文会提到同样比较常用的should.js。
采用should
//异步
最深处的回调函数中加done()表示结束:按照瀑布流编程习惯,取名done是表示你回调的最深处,也就是结束写嵌套回调函数。但对于回调链来说done实际上意味着告诉mocha从此处开始测试,一层层回调回去。
假如我有两个异步函数(两条分叉的回调链),那我应该在哪里加done()呢?实际上这个时候就不应该在一个it里面存在两个要测试的函数,事实上一个it里面只能调用一次done,当你调用多次done的话mocha会抛出错误。
fs = require(‘fs‘);
describe(‘File‘, function(){
describe(‘#readFile()‘, function(){
it(‘should read test.ls without error‘, function(done){
fs.readFile(‘test.ls‘, function(err){
if (err) throw err;
done();
});
})
it(‘should read test.js without error‘, function(done){
fs.readFile(‘test.js‘, function(err){
if (err) throw err;
done();
});
})
})
})
未写细节的:默认会pass
describe(‘Array‘, function(){
describe(‘#indexOf()‘, function(){
it(‘should return -1 when the value is not present‘, function(){
})
})
});
only skip函数:只有only的会被执行,另一个会被忽略掉。每个函数里只能有一个only。如果是it.skip ,那么该case就会被忽略。
fs = require(‘fs‘);
describe(‘File‘, function(){
describe(‘#readFile()‘, function(){
it.only[skip](‘should read test.ls without error‘, function(done){
fs.readFile(‘test.ls‘, function(err){
if (err) throw err;
done();
});
})
it(‘should read test.js without error‘, function(done){
})
})
})
before beforeEach after afterEach
beforeEach会对当前describe下的所有子case生效。
before和after的代码没有特殊顺序要求。
同一个describe下可以有多个before,执行顺序与代码顺序相同。
同一个describe下的执行顺序为before, beforeEach, afterEach, after
当一个it有多个before的时候,执行顺序从最外围的describe的before开始,其余同理。
以上都是BDD 行为驱动开发
如果是TDD的话 测试驱动开发:suite, test, setup, teardown
suite ‘Array‘, !->
setup !->
console.log ‘setup‘
teardown !->
console.log ‘teardown‘
suite ‘#indexOf()‘, !->
test ‘should return -1 when not present‘, !->
assert.equal -1, [1,2,3].indexOf 4
原文:http://www.cnblogs.com/wang-jing/p/4868662.html