如何测试广播后是否填充了示波器?我已经搜索并在stackexchange中找到了一些质量检查,但是没有一个回答我的问题。该代码可以正常工作,只是不知道如何对其进行测试。我可以补充一点,我是测试的新手,尤其是Jasmine。
所以,这是代码:
服务CrappySvc:
update: function() { $rootScope.$broadcast('updatecrappy', Crappy.query()); }
控制器GetCrappyCtrl:
$scope.$on('updatecrappy', function(event, crap) { $scope.crap = crap; });
茉莉花:
beforeEach(inject(function($rootScope, $httpBackend, $controller, Crappy) { rootScope = $rootScope; scope = $rootScope.$new(); Crappy = mockCrappy; ... spyOn(rootScope, '$broadcast'); ... ctrl = $controller('GetCrappyCtrl', { $scope : scope, Crappy : mockCrappy });
}));
it('$scope.$on should have been triggered', function() { rootScope.$broadcast('updatecrappy', [{id : 2, name : 'crappy'}]); expect(rootScope.$broadcast).toHaveBeenCalledWith('updscenes', [{id : 2, name : 'crappy'}]);
});
结石
您需要告诉Jasmine让间谍调用实际的$ broadcast函数
spyOn($rootScope, '$broadcast').andCallThrough();
如果您不使用andCallThrough()间谍,则不会执行任何操作。
andCallThrough()
jasmine文档
编辑
对于Jasmine 2,语法为
spyOn($rootScope, '$broadcast').and.callThrough();