javascript - 测试nodejs和谐生成器方法

标签 javascript node.js mocha.js 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);
            }
        }
     }
}

您可以在带有 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/

相关文章:

javascript - module.js 运行iron-node 时找不到模块

javascript - $(document).click() 在 iPhone 上无法正常工作。查询

javascript - javascript函数可以返回结构体类型吗

javascript - 从 firebase 检查子字符串并检索数据

node.js - 如何在WebSocket中设置套接字的id?

node.js - 未从 nodejs 产生的进程接收标准输出

c# - 输入的值不是由 JavaScript 设置的(或者是吗?)

Javascript promise 不会通过 async/await 返回

reactjs - 使用 Chai\Mocha 设置进行单元测试时,如何让 JSDOM 与 typescript 一起使用?

reactjs - 语法错误: Unexpected reserved word on running mocha with enzyme