2012-12-04 15 views
31

In che modo le persone scrivono test angolari di e2e che implicano l'attivazione di una sequenza di eventi dell'interfaccia utente? La natura asincrona dello scenario sembra renderla difficile.test di e2e per scenari angolari: attendere che gli eventi chiave vengano completati prima di procedere

dettagli: Sto scrivendo i test per un'applicazione che ha un sacco di gestione delle chiavi per facilitare la modifica di un modulo specializzato. Ho unito un'estensione della tastiera allo scenario dsl (vedi sotto), ma solo il primo evento chiave di un test ha alcun effetto. vale a dire

keyboard().keydown(null, 'keydown', 40, false, true); // ctrl-down 
expect(element('*:focus').text()).toEqual('00:04'); 
keyboard().keydown(null, 'keydown', 40, false, true); // ctrl-down 
expect(element('*:focus').text()).toEqual(''); // but equals 00:04 

La seconda KeyDown non fa nulla, perché non trova un *: focus per instradare la chiave (anche se c'è uno sullo schermo). Confondere.

angular.scenario.dsl('keyboard', function() { 
    var chain = {}; 
    chain.keydown = function(selector, keyEvent, keyCode, shift, ctrl) { 
     return this.addFutureAction("keyEvent", function($window, $document, done) { 
      var jQuery = $window.$; 
      var e = jQuery.Event(keyEvent); 
      e.keyCode = keyCode; // # Some key code value 
      e.altKey = false; 
      e.ctrlKey = ctrl; 
      e.shiftKey = shift; 
      if (selector == null) selector = '*:focus'; 
      var j = jQuery(selector); 
      if (j == null) j = jQuery('body'); 
      j.trigger(e); 
      done(); 
     }); 
    }; 
    return function() { 
     return chain; 
    }; 
}); 
+0

Quindi il problema è probabilmente sul codice, non sul test. Vuoi pubblicare cosa sta facendo il tuo evento 'keydown' sulla tua app? Ho copiato il tuo test dello scenario e, aggiunto un 'browser.navigateTo', aggiunto un singolo' div' sul mio HTML ('tabindex =" 0 "'), e ho aggiunto un semplice evento che alterna il contenuto tra '' e '00: 40 'su keydown. Tutto ha funzionato bene. –

risposta

1

utente sembrano aver abbandonato questa domanda, ma come ho detto, questo è probabilmente un problema con il suo gestore di eventi keydown.

Fatto uno Plnker qui con esattamente lo stesso codice e tutto funziona come previsto.

Problemi correlati