sto*_*nau 21 unit-testing jasmine angularjs angularjs-scope
如何在广播后测试范围是否已填充?我在stackexchange中搜索并发现了一些QA,但没有人回答我的问题.代码工作正常,只是不知道如何测试它.我可以补充一点,我是测试新手,尤其是Jasmine.
那么,这是代码:
服务CrappySvc:
update: function() {
$rootScope.$broadcast('updatecrappy', Crappy.query());
}
Run Code Online (Sandbox Code Playgroud)
控制器GetCrappyCtrl:
$scope.$on('updatecrappy', function(event, crap) {
$scope.crap = crap;
});
Run Code Online (Sandbox Code Playgroud)
茉莉花:
beforeEach(inject(function($rootScope, $httpBackend, $controller, Crappy) {
rootScope = $rootScope;
scope = $rootScope.$new();
Crappy = mockCrappy;
...
spyOn(rootScope, '$broadcast');
...
ctrl = $controller('GetCrappyCtrl', {
$scope : scope,
Crappy : mockCrappy
});
Run Code Online (Sandbox Code Playgroud)
}));
it('$scope.$on should have been triggered', function() {
rootScope.$broadcast('updatecrappy', [{id : 2, name : 'crappy'}]);
expect(rootScope.$broadcast).toHaveBeenCalledWith('updscenes', [{id : 2, name : 'crappy'}]);
Run Code Online (Sandbox Code Playgroud)
});
石
iva*_*rni 36
你需要告诉Jasmine让间谍调用实际的$ broadcast函数
spyOn($rootScope, '$broadcast').andCallThrough();
Run Code Online (Sandbox Code Playgroud)
如果你不使用andCallThrough()间谍什么都不做.
编辑
使用Jasmine 2,语法将是
spyOn($rootScope, '$broadcast').and.callThrough();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
16981 次 |
| 最近记录: |