小编Ala*_*don的帖子

使用Jasmine异步测试postMessage不起作用

我正在尝试使用Jasmine 2.0为AngularJS应用程序中的某些逻辑编写单元测试,但逻辑在一个事件监听器中.从控制器:

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

并从测试文件:

  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();
    });
  });
Run Code Online (Sandbox Code Playgroud)

但是测试失败了,间谍从未被击中.放入控制台调试语句的额外信息:

  • window.addEventListener 在控制器IS被调用.
  • beforeEachit块都得到调用.
  • 在测试期间,不会调用控制器中的上述消息处理程序.
  • 此测试中发送的消息最终会被消息处理程序多次收到,但直到测试结束后才会收到.

我的测试缺少什么?

javascript unit-testing postmessage jasmine angularjs

8
推荐指数
1
解决办法
4233
查看次数