我正在尝试使用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
是假的。
答案 0 :(得分:11)
Sinon.spy(object, "method")
期望第一个参数的对象,但$
是一个函数。你应该像这样监视$.prototype
:
var spy = sinon.spy($.prototype, "append");
小提琴:http://jsfiddle.net/RZ825/
或者你可以像这样监视单个对象:
var spy = sinon.spy($("body"), "append");
答案 1 :(得分:2)
我意识到这个问题已经过时了,但我遇到了类似的问题并找到了解决方案。
我尝试了上面建议的其中一个。
var spy = sinon.spy($("#id"), "function");
我的版本:
var spy = sinon.spy($("#id")[0], "function");
然而,这不起作用,我花了一些时间来弄清楚原因。原来你需要在jQuery对象之后访问数组。
像这样:
browser.click_link_by_partial_text('Download')
Sinon对jQuery对象本身没有任何作用,因为它可以包含多个值,并且它不知道你想要哪一个(即使只有一个)。
PS:我注意到这对所有 jquery函数都不起作用。对我而言,这对“焦点”起作用。 PPS:这可能与此问题无关。但我一直试图做的是在业力跑者中引发焦点事件。到目前为止,我一直不成功(点击事件确实有效)。我将在StackOverflow上发布一个问题。
答案 2 :(得分:0)
我认为你不能窥探jQuery函数 - 它们被绑定到每个对象。它的工作原理如下:
如果找到 - 返回它。如果不是 - 错误。诗乃不会在这里工作。
答案 3 :(得分:-1)
你必须监视$
并返回一个具有附加功能的对象作为间谍
var spy = jasmine.createSpy();
sinon.spy(window, "$").returns({append: spy})