我單元測試一些JavaScript與茉莉花和希望窺探(模擬)的由jQuery選擇訪問的DOM的元件上。刺探jQuery選擇在茉莉
我的規格是:
it("should be able to mock DOM call", function() {
spyOn($("#Something"), 'val').andReturn("bar");
result = $("#Something").val();
expect(result).toEqual("bar");
});
在我specrunner.html我:
<input type="hidden" id="Something" value="foo" />
不幸的是,規範失敗:
應該能夠嘲笑DOM傳喚預期'foo'等於'bar'。
我同樣困惑。 'var $ foo = $('#foo')'。現在'$ foo'是一個現有的對象:它是一個jQuery對象。它有一個'val()'方法;它只是通過查找它的原型鏈來獲得它'jQuery.fn'。那麼爲什麼我不能'spyOn($ foo,「val」)'?爲什麼Jasmine的間諜要求我指定方法的定義?我的用例是我想檢查一下,比如說'hide()',不僅僅是一般的調用,而且還有** $ foo **。所以'spyOn(jQuery.fn,「hide」)'不會給我我想要的信息,但是'spyOn($ foo,「hide」)'會 - 如果它工作的話。 – 2011-10-27 21:15:27
@NathanLong是對的 - 這是錯誤的答案。我不知道爲什麼它被upvoted如此之高.. – badunk 2012-07-06 10:11:59
@NathanLong的問題是,每次你執行一個jQuery選擇的時候,你會得到一個全新的對象,所以你設置在窺探的人會比不同你在被測代碼裏面得到的那個。因此Alex告訴你要爲所有jquery對象監視原型($ .fn)。 – 2012-08-29 19:51:44