4

次の 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() が終了するため、コールバックが呼び出されないということだけです。

それをどのようにテストしますか?

4

1 に答える 1

3

例で行ったように、ジェネレーターを使用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;
    });
 });
于 2015-12-09T11:19:18.267 に答える