量角器:模拟EventSource

时间:2016-06-28 16:38:51

标签: javascript angularjs protractor

是否有任何方法可以从量角器测试中模拟任何SSE(服务器发送事件)?

这意味着嘲笑EventSource

角度控制器:

angular.module('app').controller('HomeController', function() {

  var monitoringEvents = new window.EventSource('/streams/jobserveur');

  monitoringEvents.addEventListener('monitoring-event', function(e) {
    var json = JSON.parse(e.data);    
    ...
  });
});

感谢您的任何见解

1 个答案:

答案 0 :(得分:0)

我设法通过我提到的解决方案(角度模块/量角器addMockModule)来模拟EventSource

  1. EventSource个调用外部化为专用的角度模块

    angular.module('app.sse', [])
    .value('$sse', {
      sources : [],
      addEventSource : function(name, url) {
        this.sources[name] = new window.EventSource(url);
      },
      addEventListener : function(name, eventName, callback) {
        this.sources[name].addEventListener(eventName, callback);
      }
    });
    
  2. 在应用程序中引用该模块

    angular.module('app', ['app.sse', ...])
    
  3. 使用应用中的$sse模块

    angular.module('app').controller('HomeController', ['$sse' , function($sse) {
      $sse.addEventSource('jobserveur', '/streams/jobserveur');
    
      $sse.addEventListener('jobserveur', 'monitoring-event', function(e) {
        var js = JSON.parse(e.data);
      }
    }]);
    

    从这里开始,确保您的应用在进入测试之前仍然有效

  4. 模拟测试中的app.sse模块

    describe('SSE Fixture', function() {
      beforeEach(function() {
        browser.addMockModule('app.sse', function() {
          angular.module('app.sse', []).value('$sse', {
            addEventSource: function(name, url) {
    
            },
            addEventListener: function(name, event, callback) {
    
            }
          });
      });
    }
    

    你完成了!显然,这两种方法并没有在这里实现,app.sse模块无论如何都是健壮的,但你得到的是。

  5. 希望它可以帮助任何人

    干杯