Probar postMessage con Jasmine async no funciona

Estoy tratando de usar Jasmine 2.0 para escribir pruebas unitarias para cierta lógica en una aplicación AngularJS, pero la lógica está dentro de un detector de eventos. Desde el controlador:

  window.addEventListener('message', function(e) {
    if (e.data === "sendMessage()") {
      $scope.submit();
    }
  }, false);

Y del archivo de prueba:

  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();
    });
  });

Pero la prueba falla, el espía nunca es golpeado. Información adicional de poner en la consola declaraciones de depuración:

window.addEventListener en el controlador se llama.losbeforeEach yit bloque se llaman ambos.No se llama al controlador de mensajes anterior en el controlador durante la prueba.El mensaje enviado en esta prueba eventualmente está siendo recibido por el manejador de mensajes, varias veces, pero no hasta después de que finaliza la prueba.

¿Qué falta mi prueba aquí?