假设您有以下 JS 函数:
function YourProxy($orm, $usr) {
this.addToDB = function(obj) {
/* Do some validation on obj */
return function(callback){
var oo = $orm.createNew(obj);
oo.save(options, function(err,ok){
if(err) callback(err);
callback(null,ok);
}
}
}
}
您可以在带有 ES6 生成器的 node.js 上使用它来等待该操作发生,例如:
function *(){
var yourProxy = new YourProxy();
try {
var result = yield yourProxy.addToDB(anObject);
} catch(e) {
/* Something went wrong sync. Here you have err from save's callback */
}
/* result contains ok, the one from save's callback */
}
使用 mocha 和 sinon(以及 mocha-sinon)测试我是否做过这样的事情:
describe('addToDB', function(){
it('adds the object to the db', function(){
var callback = sinon.spy();
myProxy.addToDB(anObject)(callback);
expect( callback ).to.be.calledOnce;
});
});
但我得到的只是回调从未被调用,因为 addToDB() 在保存的回调被调用之前退出。
你会如何测试它?
最佳答案
尝试使用 co-mocha
并像您在示例中那样生成生成器。
describe('addToDB', function(){
it('adds the object to the db', function* (){
var callback = sinon.spy();
yield myProxy.addToDB(anObject)(callback);
expect( callback ).to.be.calledOnce;
});
});
关于javascript - 测试nodejs和谐生成器方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22253137/