2016-01-22 13 views
9

Come si verifica se un evento è stato attivato in Jasmine senza jquery-jasmine?Verificare se un evento è stato attivato in Jasmine

Sto lavorando a un progetto in cui non utilizziamo jQuery (wohoo) e sto provando a scrivere un test di unità per la funzione di attivazione del menu. Funziona in questo modo:

  • Si fa clic su un pulsante
  • mio componente testabile poi corre document.dispatchEvent(new CustomEvent('menu.toggle'))
  • voglio provare che il componente effettivamente inviato l'evento personalizzato.

Come si esegue il test?

risposta

7

suonato in giro un po 'e hanno trovato una soluzione che ha funzionato bene:

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

Fondamentalmente creare una nuova spia chiamato 'evento', aggiungendo come un gestore di eventi per il mio evento, e quindi la verifica è stato chiamato.

Se ci sono modi migliori per farlo, sarò più che felice di accettare una risposta diversa.

+0

Dove è definito 'menuToggleSpy' qui? Ricevo un errore "impossibile trovare la variabile". – adamdport

+0

ah, 'spy === menuToggleSpy'. Aggiornerò la mia risposta –

Problemi correlati