testingnodejs和声生成器方法

假设你有以下的JSfunction:

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); } } } } 

你可以在node.js上使用ES6生成器来等待这个操作发生,如下所示:

 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 */ } 

为了testing我做了这样的事情,使用摩卡和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; }); }); 

但我得到的是,callback从来没有被调用,因为addToDB()在调用save的callback之前退出。

你将如何testing?

尝试使用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; }); });