如何监视jQuery追加函数Sinon

时间:2013-07-22 10:05:57

标签: javascript jquery sinon

我正在尝试使用sinon.jsjQuery.append函数上创建间谍。

我尝试了var spy = sinon.spy($, "append");并收到以下错误:TypeError: Attempted to wrap undefined property append as function

然后我修改为:var spy = sinon.spy($.fn, "append");这似乎更好,但spy.called是假的。

4 个答案:

答案 0 :(得分:11)

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/

答案 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函数 - 它们被绑定到每个对象。它的工作原理如下:

  • 您在jQuery对象上调用方法。
  • jQuery在自己的$ .fn。
  • 中检查它
  • jQuery在插件中检查它。

如果找到 - 返回它。如果不是 - 错误。诗乃不会在这里工作。

答案 3 :(得分:-1)

你必须监视$并返回一个具有附加功能的对象作为间谍

var spy = jasmine.createSpy();
sinon.spy(window, "$").returns({append: spy})