编程语言
首页 > 编程语言> > javascript – 如何测试$rootScope.$emit事件?

javascript – 如何测试$rootScope.$emit事件?

作者:互联网

我在abc控制器中有以下代码:

   $rootScope.$on('selectedItem', function (event, data) {
       vm.selectedItem = data;
   });

调用函数在xyz控制器中:

  function doThis(){
     $rootScope.$emit('selectedItem', 'somedata');
  }

如何在业力测试中复制或模拟这种情况?

解决方法:

对于第一个控制器(abc),你使用$rootScope.$on听它,你可以先$rootScope.$发出它和$scope.$digest()它.这样你就可以在$on上收到它.

var rootScope;
beforeEach(inject(function(_$rootScope_) {
    rootScope = _$rootScope_;
}));

describe("some function", function() {
    it("should receive selectedItem with $on", function() {
        rootScope.$emit('selectedItem', 'somedata');
        $scope.$digest();
        expect(vm.selectedItem).toEqual('somedata');
    });
});

对于第二个控制器(xyz),你可以监视$rootScope.$emit.并期望它在xyz控制器中调用.像这样:

var rootScope;
beforeEach(inject(function(_$rootScope_) {
    rootScope = _$rootScope_;
    spyOn(rootScope, '$emit');
}));

describe("doThis function", function() {
    it("should $emit selectedItem", function() {
        vm.doThis(); // or if you use $scope, call it that way
        expect(rootScope.$emit).toHaveBeenCalledWith('selectedItem');
    });
});

标签:javascript,unit-testing,angularjs,karma-jasmine
来源: https://codeday.me/bug/20190727/1552409.html