2016-01-22 13 views
9

Jak sprawdzić, czy zdarzenie zostało wywołane w Jasmine bez jquery-jasmine?Testowanie, czy zdarzenie zostało wywołane w Jasmine

Pracuję nad projektem, w którym nie używamy jQuery (wohoo) i próbuję napisać test jednostkowy dla mojej funkcji wyzwalania menu. To działa tak:

  • kliknąć przycisk
  • Moja sprawdzalne komponent następnie uruchamia document.dispatchEvent(new CustomEvent('menu.toggle'))
  • chcę przetestować, że komponent rzeczywiście wywołał zdarzenie niestandardowe.

Jak to przetestować?

Odpowiedz

7

bawił się trochę i znaleźć rozwiązanie, które działa dobrze:

import triggerEvent from 'trigger-event'; 
import component from './components/site-menu'; 

describe('triggering menu button',() => { 
    let menuToggleSpy; 
    beforeEach(() => { 
    menuToggleSpy = jasmine.createSpy('event'); 
    component(); 
    }); 

    it('dispatches menu.toggle event',() => { 
    document.addEventListener('menu.toggle', menuToggleSpy); 

    const $trigger = document.querySelector('.js-trigger-main-menu'); 
    triggerEvent($trigger, 'click'); 

    expect(menuToggleSpy).toHaveBeenCalled(); 
    }); 
}); 

Zasadniczo utworzenia nowego szpiega o nazwie „zdarzenie”, dodając go jako obsługi zdarzeń dla mojego przypadku, a następnie weryfikacji to zostało nazwane.

Jeśli są na to lepsze sposoby, z przyjemnością przyjmuję inną odpowiedź.

+0

Gdzie zdefiniowano tutaj "menuToggleSpy"? Otrzymuję błąd "Nie mogę znaleźć zmiennej". – adamdport

+0

ah, 'spy === menuToggleSpy'. Zaktualizuję moją odpowiedź. –

Powiązane problemy