gpt4 book ai didi

javascript - 使用 JavaScript 和 sinon 如何监视构造函数中调用的方法?

转载 作者:行者123 更新时间:2023-11-30 08:36:59 25 4
gpt4 key购买 nike

我真的需要以下代码的帮助 - 这不是从我的程序中粘贴的,它是我的头脑,但我认为它清楚地说明了问题(并且我相信它是完全准确的)。当我请求“spy.called”的值时,它会忽略在构造函数中进行的调用。我如何对此进行编码,以便 spy 注册构造函数内部的调用?

或者如果不可能,我应该采取什么方法?非常感谢示例代码 - 非常感谢 - 一整天都在用这个敲我的脑袋!

function MyClass() {
var self = this;
this.myFunc = function() {
console.log("hi");
}
function init() {
self.myFunc();
}
init();
}


var spy = sinon.spy(new MyClass(), "myFunc");
console.log(spy.called); // true if the spy was called at least once
// ABOVE OUTPUTS FALSE - IT FAILS TO REGISTER THE CALL IN THE CONSTRUCTOR!
spy.myFunc();
console.log(spy.called);
// ABOVE OUTPUTS TRUE AS EXPECTED

最佳答案

这里的问题是,当方法 myFunc 被调用时, spy 还不存在。您的代码相当于:

var c = new MyClass()
var spy = sinon.spy(c, "myFunc");

很明显,当调用构造函数时, spy 不在位。

要解决这个问题,您可以在MyClass 对象的原型(prototype)中移动方法myFunc,然后在原型(prototype)中侦测这些方法。

例如:

function MyClass() {
this.init();
}

MyClass.prototype.myFunc = function() {
console.log("hi");
}

MyClass.prototype.init = function() {
this.myFunc();
}

var myFuncSpy = sinon.spy(MyClass.prototype, "myFunc");
var initSpy = sinon.spy(MyClass.prototype, "init");

var c = new MyClass();
console.log(myFuncSpy.called); // TRUE
console.log(initSpy.called); // TRUE

JSFIDDLE:http://jsfiddle.net/och191so/1/打开控制台查看结果。

关于javascript - 使用 JavaScript 和 sinon 如何监视构造函数中调用的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30466011/

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