我有一个简单$ scope的控制器。$ on:
app.controller('MyController', function($scope) {
$scope.$on("myBroadRcvr", function(event, data) {
$scope.name = data.name;
$scope.empID = data.empID;
});
});
我尝试过像这样的单元测试:
describe('MyController', function () {
var $scope, super_controller;
beforeEach(function(){
module('myApp');
inject(function($rootScope, $controller){
$scope = $rootScope.$new();
spyOn($scope, '$on');
super_controller = $controller('MyController', {$scope: $scope});
});
});
it('should receive name as test', function (){
var myData = {name: 'test', empID: 'eg7gg'},
var sub_scope = $scope.$new();
sub_scope.$broadcast('myBroadRcvr', myData);
expect($scope.$on).toHaveBeenCalled();
expect($scope.name).toBe('test');
});
});
通过以上我得到:
Expected undefined to be 'test'.
答案 0 :(得分:3)
您的sub_scope
是$scope
的孩子,但$broadcast
向下发送事件 范围层次结构,因此您的侦听器位于父范围({{ 1}}在这种情况下)无法捕获它。您应该使用$scope
,因此:
$emit
将事件名称向下调度到所有子范围(及其子级),通知已注册的$ rootScope.Scope侦听器。
(与$emit对比,向上发送。)
您的代码也有一个小的语法错误:行sub_scope.$emit('myBroadRcvr', myData);
应该以{{1}}结尾。