gpt4 book ai didi

javascript - 如果间接调用 spied 方法,则不会调用 Sinon Spy

转载 作者:数据小太阳 更新时间:2023-10-29 03:52:00 28 4
gpt4 key购买 nike

问题

在我们的代码库中,我们有一个 sinon 问题,可以使用下面的代码片段重现。问题是,它似乎是间接调用的 spy 返回力 falseconsole.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

主要.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() 的私有(private)函数,以及它公开的两个方法相同的名字。

Sinon 能够监视公开的方法,但不能监视内部函数。

当您调用 module.method() 时,您会调用公开的方法,因此 Sinon 能够检测到该调用。然而,当你调用method.methodCaller()时,methodCaller()直接调用了method()私有(private)函数,因此调用不是被诗乃检测到。

如果您将 methodCaller() 函数更改为:

methodCaller = function(){
this.method();
}

... 那么 Sinon 应该能够在调用 methodCaller() 时捕获对 method() 的“间接”调用。

关于javascript - 如果间接调用 spied 方法,则不会调用 Sinon Spy,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26041079/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com