【发布时间】:2017-08-23 14:26:41
【问题描述】:
我正在使用 sinon 1.17.6。以下是我的代码:
it('should', sinon.test(function(/*done*/) {
const stubtoBeStubbedFunction = this.stub(this.myObj, 'toBeStubbedFunction');
const instance = {
id: 'instanceId',
tCount: 3,
};
console.log('0 toBeStubbedFunction', this.myObj.toBeStubbedFunction);
return this.myObj.toBeTestedFunction(instance)
.then(() => {
console.log('3 toBeStubbedFunction', this.myObj.toBeStubbedFunction);
expect(stubtoBeStubbedFunction.calledOnce).to.be.true();
// done();
});
}));
MyClass.prototype.toBeTestedFunction = function toBeTestedFunction(input) {
const metaData = {};
this.log.debug('toBeTestedFunction');
if (input.tCount === 0) {
console.log('1', this.toBeStubbedFunction);
return bluebird.resolve((this.toBeStubbedFunction(metaData)));
}
return this.myClient.getData(input.id)
.bind(this)
.then(function _on(res) {
if (res) {
console.log('2', this.toBeStubbedFunction);
this.toBeStubbedFunction(metaData);
}
})
.catch(function _onError(err) {
throw new VError(err, 'toBeTestedFunctionError');
});
};
console.log 输出:
0 toBeStubbedFunction toBeStubbedFunction
2 function toBeStubbedFunction(meta) {
// real implementation
}
3 toBeStubbedFunction function toBeStubbedFunction(meta) {
// real implementation
}
似乎在测试运行期间,已恢复存根函数。我认为sinon.test() 应该在返回的承诺解决或捕获后恢复存根(存根应该在console.log('2', this.toBeStubbedFunction); 运行后恢复)。 为什么?我使用done 来解决我的问题。但是有更好的解决方案吗?我可能会错误地使用mocha 和sinon。
欢迎任何 cmets。谢谢
【问题讨论】:
标签: javascript promise mocha.js sinon