2013-10-10 72 views
1

我正在使用茉莉花來測試我的JavaScript,並且我正在爲規範找到一個難題。我有這個功能正在被直接傳遞到處理程序:Jasmine spyOn:如何通過間諜函數引用使其工作?

filters.find('#per_page').change(checkList.filter); 

現在,我想打探一下,看看是否它被稱爲當我改變的是:

describe("when I change the number of items per page", function() { 
    beforeEach(function() 
     spyOn(checkList, 'filter'); 
     $('#per_page').val('50').trigger('change'); 
    }); 
    it("filters the results list", function() { 
    expect(checkList.filter).toHaveBeenCalled(); 
    }); 
}); 

這個測試失敗。令人驚訝的是,如果我將上面的代碼更改爲:

filters.find('#per_page').change(function() { checkList.filter(); }); 

它通過。有沒有辦法窺探通過這樣的功能,還是我不得不訴諸匿名功能的情況下?

回答

1

是的,有,但要這樣做,事件必須綁定後,你的功能上添加了間諜。其原因是間諜用另一個函數替換屬性(它不會改變函數本身)。在你的情況下,發生的是你分配了原始函數,並且當你添加了間諜時,你替換了屬性而不改變綁定的回調。

如果您的應用程序讓你不能做事件綁定之前添加您的間諜,不是隻有它才能正常工作的方法是使用匿名函數調用其中的適當回調。

相關問題