ブロードキャスト後にスコープに値が入力されたことをどのようにテストしますか?私は検索して、いくつかのQAをここでstackexchangeで見つけましたが、誰も私の問題に答えませんでした。コードは問題なく動作していますが、テストする方法はわかりません。私はテストの初心者、特にジャスミンと付け加えることができます。
だから、ここのコードです:
サービス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'}]);
});
あなたはスパイが何もしないandCallThrough()
を使用しない場合はスパイが
spyOn($rootScope, '$broadcast').andCallThrough();
実際の$放送関数を呼び出すようにするジャスミンを指示する必要がありストーン
私はこれも参考になりました:http://stackoverflow.com/questions/15272414/how-can-i-test-events-in-angular – Ben