如何测试 $rootScope.$emit 事件?
How can I test $rootScope.$emit event?
我在 abc
控制器中有以下代码:
$rootScope.$on('selectedItem', function (event, data) {
vm.selectedItem = data;
});
调用函数在xyz
控制器中:
function doThis(){
$rootScope.$emit('selectedItem', 'somedata');
}
如何在业力测试中重现或模拟这种情况?
使用 Jasmine,它可能看起来像这样:
var rootScope;
beforeEach(inject(function($injector) {
rootScope = $injector.get('$rootScope');
spyOn(rootScope, '$emit');
}));
describe("$rootScope event testing", function() {
it("should $emit selectedItem", function() {
expect(rootScope.$emit).toHaveBeenCalledWith('selectedItem');
});
});
对于第一个控制器 (abc
),如果您使用 $rootScope.$on
收听它,您可以先 $rootScope.$emit
它和 $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
上 spy
。 expect
它在 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');
});
});
我在 abc
控制器中有以下代码:
$rootScope.$on('selectedItem', function (event, data) {
vm.selectedItem = data;
});
调用函数在xyz
控制器中:
function doThis(){
$rootScope.$emit('selectedItem', 'somedata');
}
如何在业力测试中重现或模拟这种情况?
使用 Jasmine,它可能看起来像这样:
var rootScope;
beforeEach(inject(function($injector) {
rootScope = $injector.get('$rootScope');
spyOn(rootScope, '$emit');
}));
describe("$rootScope event testing", function() {
it("should $emit selectedItem", function() {
expect(rootScope.$emit).toHaveBeenCalledWith('selectedItem');
});
});
对于第一个控制器 (abc
),如果您使用 $rootScope.$on
收听它,您可以先 $rootScope.$emit
它和 $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
上 spy
。 expect
它在 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');
});
});