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