次の 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);
}
}
}
}
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 */
}
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() が終了するため、コールバックが呼び出されないということだけです。
それをどのようにテストしますか?