如果间接调用spied方法,则不会调用Sinon Spy
Sinon Spy is not called if the spied method is called indirectly
问题
在我们的代码库中,我们有一个关于sinon的问题,可以用下面剪下的代码来重现。问题是,似乎是间接调用的间谍返回力false
,console.log
明确表示调用了该方法,但spy.called
仍然是false
。
代码
以下CDN可用于html:
//cdnjs.cloudflare.com/ajax/libs/sinon.js/1.7.3/sinon-min.js
//cdnjs.cloudflare.com/ajax/libs/require.js/2.1.14/require.min.js
main.js
require(['myModule'], function(module) {
//using sinon
var methodCallerSpy = sinon.spy(module, 'methodCaller')
console.log(methodCallerSpy); // methodCaller
module.methodCaller();
console.log(methodCallerSpy.called); //true
var methodSpy = sinon.spy(module, 'method');
console.log(methodSpy); //method
module.methodCaller();
console.log(methodSpy.called); // false
module.method();
console.log(methodSpy.called); // true
});
和模块
define(function() {
const method = () => console.log('method called by methodCaller');
const methodCaller = () => method();
return{
method,
methodCaller
}
});
问题是myModule
有两个名为method()
和methodCaller()
的私有函数,以及它公开的两个同名方法。
Sinon有能力监视暴露的方法,但没有内部功能。
当您调用module.method()
时,您正在调用公开的方法,因此Sinon能够检测到该调用。但是,当您调用method.methodCaller()
时,methodCaller()
会直接调用method()
私有函数,因此Sinon不会检测到该调用。
如果您将methodCaller()
功能更改为:
methodCaller = function(){
this.method();
}
则Sinon在调用CCD_ 14时应该能够捕获对CCD_。
相关文章:
- 未调用 Sinon 存根
- Sinon Spy不使用Javascript调用或应用程序
- 在sinon中存根嵌套函数调用
- 使用 Sinon.js 测试一个函数是否调用 ES6 模块中的另一个函数
- 如何防止 sinon 间谍调用被监视的方法
- 不调用方法上的 Sinon.spy
- 如何使用sinon.stub()只执行某个调用
- 测试Backbone.js模型保存使用Sinon不调用成功回调
- 对$.ajax的调用没有从sinon.js fakeServer启动回调
- 如果间接调用spied方法,则不会调用Sinon Spy
- backbone.js点击事件间谍不会使用jasmine.js和sinon.js调用
- 在模块上使用sinon测试方法调用.出口的方法
- 用sinon存根在角控制器构造中调用的范围方法
- AJAX调用的Sinon超时
- EmberJs + Sinon Stub没有被正确的对象调用
- 如何在后续调用sinon.js stub时使用不同的函数
- 我如何测试Sinon.js函数调用的顺序
- 用Sinon Js测试事件触发后调用的回调
- 每次调用Sinon.stub()都会返回不同的值
- 如何使用sinon来测试一个方法最终是否会被调用