我正在尝试使用sinon.js
该功能创建间谍jQuery.append
。
我试过:var spy = sinon.spy($, "append");
并得到以下错误: TypeError: Attempted to wrap undefined property append as function
。
然后我修改为:var spy = sinon.spy($.fn, "append");
这似乎更好,但这spy.called
是错误的。
我正在尝试使用sinon.js
该功能创建间谍jQuery.append
。
我试过:var spy = sinon.spy($, "append");
并得到以下错误: TypeError: Attempted to wrap undefined property append as function
。
然后我修改为:var spy = sinon.spy($.fn, "append");
这似乎更好,但这spy.called
是错误的。
Sinon.spy(object, "method")
第一个参数需要一个对象,但$
它是一个函数。你应该像这样监视$.prototype
:
var spy = sinon.spy($.prototype, "append");
小提琴:http: //jsfiddle.net/RZ825/
或者你可以像这样监视单个对象:
var spy = sinon.spy($("body"), "append");
小提琴:http: //jsfiddle.net/G5J8H/
我意识到这个问题很老,但我遇到了类似的问题并找到了解决方案。
我尝试了上面建议的其中一个答案。
var spy = sinon.spy($("body"), "append");
我的版本:
var spy = sinon.spy($("#id"), "function");
然而这并没有奏效,我花了一些时间才弄清楚原因。原来你需要在 jQuery 对象之后访问数组。
像这样:
var spy = sinon.spy($("#id")[0], "function");
Sinon 不对 jQuery 对象本身做任何事情,因为它可以包含多个值并且它不知道您想要哪一个(即使只有一个)。
PS:我注意到这不适用于所有jquery 函数。对我来说,它适用于“焦点”。PPS:这可能与这个问题无关。但是我一直在尝试做的是在 karma-runner 中触发一个焦点事件。到目前为止,我一直没有成功(但是点击事件确实有效)。为此,我将在 StackOverflow 上发布一个问题。
我认为您不能监视 jQuery 函数 - 它们绑定到每个对象。它是这样工作的:
如果找到 - 归还。如果不是 - 错误。诗乃不会在这里工作。
您必须监视$
并返回一个具有附加功能的对象作为间谍
var spy = jasmine.createSpy();
sinon.spy(window, "$").returns({append: spy})