2015-08-27 49 views
0

时功能不受柴间谍承认我有一个返回蓝鸟承诺两个异步功能:兴农存根断言函数调用

Async1: function() { 

    return new Promise(function(resolve, reject) { 

    execute(query) 
     .then(function(resp) { 
     resolve(resp); 
    }) 
     .catch(function(err) { 
     reject(err); 
    }); 
    }); 

} 

Async2: function() { 

    return new Promise(function(resolve, reject) { 

    execute(query2) 
     .then(function(resp) { 
     resolve(resp); 
    }) 
     .catch(function(err) { 
     reject(err); 
    }); 
    }); 

} 

我还有一个模块调用这些方法,像这样:

module.exports = Foo { 
    Bar: require(./'Bar'); 
    caller: function() { 
    this.Bar.Async1() 

     .then(function(resp) { 
     this.Bar.Async2() 

     .then(function(resp) { 
      // do something 
     }.bind(this)) 
    }.bind(this)) 
    } 
} 

在我的测试案例中,我想检查Bar.Async2是否被调用,并且我有以下测试用例失败:

it('should call Foo.Bar.Async2', function(done) { 
var spy; 

    sinon.stub(Foo.Bar, 'Async1').returns(
    new Promise(function(resolve) { 
     resolve(); 
    }) 
); 

    sinon.stub(Foo.Bar, 'Async2').returns(
    new Promise(function(resolve) { 
     resolve(); 
    }) 
); 

    spy = chai.spy.on(Foo.Bar, 'Async2'); 
    Foo.caller(); 
    expect(spy).to.be.called(); 
    done(); 
}); 

我从控制台日志中知道Async2确实被调用,所以我想知道为什么间谍不会选择它?

回答

0

我无法解决这个问题,因为在实现中我必须将回调传递给只有测试使用的控制器。从这里我可以使用回调来测试代码。