Testar o postMessage com Jasmine async não funciona
Estou tentando usar o Jasmine 2.0 para escrever testes de unidade para alguma lógica em um aplicativo AngularJS, mas a lógica está dentro de um ouvinte de evento. Do controlador:
window.addEventListener('message', function(e) {
if (e.data === "sendMessage()") {
$scope.submit();
}
}, false);
E a partir do arquivo de teste:
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();
});
});
Mas o teste falha, o espião nunca é atingido. Informações adicionais ao inserir instruções de depuração do console:
window.addEventListener
no controlador está sendo chamado.obeforeEach
eit
bloco estão sendo chamados.O manipulador de mensagens acima no controlador não está sendo chamado durante o teste.A mensagem enviada nesse teste está sendo recebida pelo manipulador de mensagens várias vezes, mas não até o término do teste.Qual é o meu teste que falta aqui?