断言函数调用时,柴间谍无法识别 Sinon 存根函数
Sinon stubbed function is not recognised by chai spy when asserting function call
我有两个 return bluebird 承诺的异步函数:
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 确实被调用了,所以我想知道为什么间谍不接收它?
我无法解决这个问题,因为在实现中我不得不将回调传递给只有测试使用的控制器。从这里我可以使用回调来测试代码。
我有两个 return bluebird 承诺的异步函数:
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 确实被调用了,所以我想知道为什么间谍不接收它?
我无法解决这个问题,因为在实现中我不得不将回调传递给只有测试使用的控制器。从这里我可以使用回调来测试代码。