2016-03-21 9 views
0

Ich habe einen kleinen Test (Jasmine + Jasmine-jquery) um zu prüfen, ob ein btn angeklickt wurde und zu testen, ob seine Callbacks korrekt waren Ausgeführte, aber ich einige seltsame Fehler bin vor:jQuery Jasmine Klickereignis: Erwartetes Ereignis [Objekt Objekt] wurde auf [Objekt Objekt] getriggert

Hier ist der Test:

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(); 

}); 

die comp Variable ist ein JS-Objekt. Was ich will ist, wenn die Schaltfläche $('.arrow-up').eq(0); geklickt wird, wird die Methode _pageUp aufgerufen. Danach gibt es die Tests zu diesen Methoden (comp._pageUp() und comp._pageDown()).

Die Fehlermeldung, die ich habe, ist:

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

Auch eine letzte Erinnerung: Ich bin ziemlich sicher, dass das Gerät geladen korrigiert wird und der Test nach dem window.onload Ereignis ausgeführt wird.

Könnte jemand mir helfen zu verstehen, was mache ich falsch?

Danke, Jungs.

Antwort

0

Jungs.

Wie erwähnt here, war das Hauptproblem über den Prototyp Ansatz. So

, einige Fehler und die Prototyp spyOn Erklärung zur Festsetzung, was für mich gearbeitet wurde:

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(); 
}); 

Außerdem hatte ich das Gerät in einer "before" Methode zu laden:

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

Jetzt sind alle Tests in Ordnung.