Test postMessage mit Jasmine Async funktioniert nicht
Ich versuche, mit Jasmine 2.0 Komponententests für eine bestimmte Logik in einer AngularJS-App zu schreiben, aber die Logik befindet sich in einem Ereignis-Listener. Vom Controller:
window.addEventListener('message', function(e) {
if (e.data === "sendMessage()") {
$scope.submit();
}
}, false);
Und aus der Testdatei:
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();
});
});
Aber der Test schlägt fehl, der Spion wird nie getroffen. Zusätzliche Informationen zum Einfügen von Debug-Anweisungen für die Konsole:
window.addEventListener
in der Steuerung wird aufgerufen.DasbeforeEach
undit
Block werden beide aufgerufen.Der obige Message-Handler im Controller wird während des Tests nicht aufgerufen.Die in diesem Test gesendete Nachricht wird möglicherweise mehrmals vom Nachrichten-Handler empfangen, jedoch erst nach Ende des Tests.Was fehlt hier mein Test?