Bir AngularJS uygulamasında bazı mantık için birim testleri yazmak için Jasmine 2.0 kullanmaya çalışıyorum, ancak mantık olay dinleyicisinin içinde.Jasmine async ile test postMessage çalışmıyor
window.addEventListener('message', function(e) {
if (e.data === "sendMessage()") {
$scope.submit();
}
}, false);
Ve Test dosyasından: Denetleyicisinden
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();
});
});
Ama Test başarısız, casus vurulduktan olmadı. Konsol ayıklama tablolara koyarak gelen Ekstra bilgi:
window.addEventListener
denetleyicisi denilen oluyor.beforeEach
veit
bloklarının ikisi de aranıyor.- Kontrolördeki yukarıdaki mesaj işleyici test sırasında aranmıyor.
- Bu testte gönderilen mesaj, birkaç kez mesaj işleyici tarafından alınır, ancak test bittikten sonra olmaz.
Testim eksik burada?
Olayı alacak olandan * başka * pencere üzerinde postMessage'i aramanız gerekmiyor mu? (https://developer.mozilla.org/en-US/docs/Web/API/Window/postMessage?redirectlocale=en-US&redirectslug=DOM%2Fwindow.postMessage öğesinde yapılan gibi bir pop-up oluşturma gibi) – phtrivier
pencereden bir postmessage yerine pencereden bir açılır pencereden bir postmessage, ama tüm bu değişti, mesajı çok geç almak yerine, bu mesajı hiç almaz. –
@AlanGordon: Bunun için bir çözüm buldunuz mu? Aynı sorunları yaşıyorum ;-) –