这里举一些实际的例子说明在node中断言的简单使用!
首先是例子中使用的基础对象:
function Todo(){
this.todos = [];
}
Todo.prototype.add = function(item) {
if(!item) throw new Error('Todo#add requires an item');
this.todos.push(item);
};
Todo.prototype.deleteAll = function(){
this.todos = [];
}
Todo.prototype.getCount = function(){
return this.todos.length;
}
Todo.prototype.doAsync = function(cb){
setTimeout(cb,2000,true);
}
module.exports = Todo;
这里有关doAsync中setTimeoutde第三个参数的使用,可以参考:
http://www.cnblogs.com/snandy/archive/2011/05/18/2050315.html
这里的第三个参数主要作为setTimeout回调函数的参数使用
首先是断言中的equal和notEqual的使用:
var assert = require('assert');
var Todo = require('./Todo');
var todo = new Todo();
var testsCompleted = 0;
//使用equal测试变量的内容
function deleteTest(){
todo.add('Delete Me');
//s使用equal,判断变量内的内容是否确实等于第二个参数指定的值
assert.equal(todo.getCount(),1,'数组里应该有一个值');
todo.deleteAll();
//使用notEqual,判断变量内的内容是否等于第二个值,若等于第二个值,则表明逻辑中有问题
assert.notEqual(todo.getCount(),1,'数组里不应该有值');
testsCompleted++;
}
function doAsyncTest(cb){
todo.doAsync(function(value){
assert.ok(value,'回调函数应该返回true');
});
}
除了equal和notEqual,assert模块还提供了这两个断言的严格版本:strictEqual和notStrictEqual。
它们使用严格的相等操作符(===),而不是更随和的(==)。
为了比较对象,assert模块提供了deepEqual和notDeepEqual。
这些断言名称中的deep表明它们会递归地比较两个对象,比较两个对象的属性,如果属性也是对象,则会继续比较属性的属性。