2016-03-21 61 views
0

我有一個小測試(茉莉花+ jasmine-jquery)來檢查一個btn是否被點擊並測試它的回調是否正確執行的,但我面臨着一些奇怪的錯誤:jQuery茉莉花點擊事件:預期的事件[對象對象]已觸發[對象對象]

下面是測試:

it("Check if pagination arrows/btns had been clicked", function() { 
    // beforeEach to spy on callbacks: 
    beforeEach(function() { 
     spyOn(comp, "_pageUp"); 
    }); 

    var arrowUp = $('.arrow-up').eq(0); 
    var spyEvent = spyOnEvent(arrowUp, 'click'); 

    // Trigger the event: 
    $(arrowUp).click(); 

    expect('click').toHaveBeenTriggeredOn(arrowUp); 
    expect(spyEvent).toHaveBeenTriggered(); 

    // Check if the click callback was correctly called: 
    expect(comp._pageUp).toHaveBeenCalled(); 

}); 

comp變量是一個JS對象。我想要的是,當它的$('.arrow-up').eq(0);按鈕被點擊時,_pageUp方法被調用。之後,對這些方法進行測試(comp._pageUp()comp._pageDown())。

該錯誤消息我是:

Expected event [object Object] to have been triggered on [object Object] 

而且,最後的提醒:我敢肯定的夾具修正負荷並且測試window.onload事件之後運行。

有人能幫我理解我做錯了什麼嗎?

謝謝,夥計們。

回答

0

夥計。

如提到的here,主要問題是關於原型方法。

所以,修復了一些錯誤和原型spyOn聲明,什麼工作對我來說是:

it("OverlayNavComponent pagination btn had been clicked", function() { 
    // spyOn prototype BEFORE instantiate the component: 
    spyOn(OverlayNavComponent.prototype, "_pageUp"); 
    var comp = new OverlayNavComponent(); 
    comp.init($("#scroll-up-icon"), $("#btn-toggle-menu"), 4); 

    var btnId = "#scroll-up-icon"; 

    // spyOnEvent gets the query string and NOT the element itself as I was doing before: 
    var spyEvent = spyOnEvent(btnId, "click"); 
    // Note: $(btnId).click() did not work: 
    $(btnId).trigger("click"); 

    expect('click').toHaveBeenTriggeredOn(btnId); 
    expect(spyEvent).toHaveBeenTriggered(); 
    expect(comp._pageUp).toHaveBeenCalled(); 
}); 

此外,我不得不加載 「beforeEach」 方法內夾具:

beforeEach(function() { 
    jasmine.getFixtures().fixturesPath = "/fixtures"; 
    loadFixtures('overlaynavcomp.html'); 
}); 

現在,所有的測試都可以。