2016-03-21 55 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'); 
}); 

现在,所有的测试都可以。