Sto provando a utilizzare Jasmine 2.0 per scrivere test di unità per qualche logica in un'app AngularJS, ma la logica è all'interno di un listener di eventi. Dal controller:Testing postMessage con Jasmine async non funziona
window.addEventListener('message', function(e) {
if (e.data === "sendMessage()") {
$scope.submit();
}
}, false);
E dal file di test:
describe("post message", function() {
beforeEach(function(done) {
var controller = createController(controllerParams);
spyOn($scope, 'submit');
window.postMessage('sendMessage()', '*');
done();
});
it('should submit on a sent message', function (done) {
expect($scope.submit).toHaveBeenCalled();
done();
});
});
Ma la prova non riesce, la spia non essere colpito. Informazioni aggiuntive da inserire nelle istruzioni di debug della console:
window.addEventListener
nel controller Viene richiamato.- I blocchi
beforeEach
eit
vengono entrambi richiamati. - Durante il test non viene richiamato il gestore di messaggi sopra riportato nel controller.
- Il messaggio inviato in questo test viene infine ricevuto dal gestore messaggi, più volte, ma non prima che il test termini.
Qual è il mio test mancante qui?
Non dovresti chiamare postMessage su * un'altra * finestra rispetto a quella che riceverà l'evento? (per esempio, creando un popup, come è fatto su https://developer.mozilla.org/en-US/docs/Web/API/Window/postMessage?redirectlocale=en-US&redirectslug=DOM%2Fwindow.postMessage) – phtrivier
Cambiato provato a un postmessage da un popup fuori dalla finestra invece che da un messaggio post dalla finestra, ma tutto ciò che è cambiato è che, invece di ricevere il messaggio troppo tardi, non riceve affatto il messaggio. –
@AlanGordon: hai già trovato una soluzione per questo? Sto avendo gli stessi problemi ;-) –