测试nodejs和谐生成器方法

时间:2014-03-07 14:42:46

标签: javascript node.js mocha ecmascript-harmony chai

假设您有以下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()在调用save的回调之前退出。

你会如何测试?

1 个答案:

答案 0 :(得分: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;
    });
 });