반응형
AngularJS에서 브로드 캐스트 이벤트를 어떻게 테스트 할 수 있습니까?
루트 스코프에서 브로드 캐스트 이벤트를 내보내는 컨트롤러가 있습니다. broacast 이벤트가 올바르게 시작되었는지 테스트하고 싶습니다.
내 컨트롤러의 코드는 다음과 같습니다.
$scope.$watch("pageIndex", function(){
if($scope.pageIndex == 4)
{
// emit social share
$rootScope.$broadcast('myEvent');
}
});
다음 코드로 테스트 해 보았습니다.
it('Should call myEvent when pageIndex is 4',function(){
scope.pageIndex = 4;
scope.$apply();
expect(rootScope.$on).toHaveBeenCalledWith('myEvent');
});
그러나 그것은 코드가 호출되지 않았다는 것을 알려주며 수동으로 테스트했습니다. 그런 다음 다음 코드로 시도했습니다.
it('Should call myEvent when pageIndex is 4',function(){
var listener = jasmine.createSpy('listener');
rootScope.$on('myEvent', listener);
scope.pageIndex = 4;
scope.$apply();
expect(listener).toHaveBeenCalled();
});
그러나 동일한 부정적인 결과가 있습니다. 이벤트가 방송되는지 테스트하는 방법이 있습니까?
Jasmine을 사용한다고 가정하면 다음이 잘 작동합니다.
... other unit test setup code ...
var rootScope;
beforeEach(inject(function($injector) {
rootScope = $injector.get('$rootScope');
spyOn(rootScope, '$broadcast');
}));
describe("my tests", function() {
it("should broadcast something", function() {
expect(rootScope.$broadcast).toHaveBeenCalledWith('myEvent');
});
});
메시지를 브로드 캐스팅하고 여기에 개체를 첨부하는 경우 개체가 예상과 일치하는지 테스트 할 수도 있습니다.
someObj = { ... something ... };
expect(rootScope.$broadcast).toHaveBeenCalledWith('someEvent', someObj);
다음은 mochaJs, mocks는 sinon, 기대는 chai입니다.
describe("broadcast test", function() {
beforeEach(inject(function($rootScope){
sinon.spy($rootScope, "$broadcast")
scope.foo() //this broadcasts the event. $rootScope.$broadcast("testEvent")
}))
it("broadcasts the event", inject(function($rootScope){
expect($rootScope.$broadcast.calledWith("testEvent")).to.be.true
}))
})
참고URL : https://stackoverflow.com/questions/16757503/how-can-i-test-broadcast-event-in-angularjs
반응형
'Programing' 카테고리의 다른 글
선택한 열만있는 데이터 프레임에서 고유 (0) | 2020.11.24 |
---|---|
Vim / vi에서 백 스페이스 키가 작동하지 않음 (0) | 2020.11.24 |
상수 및 휘발성으로 선언 된 포인터 (0) | 2020.11.24 |
rxjs에서 Observable을 가져 오는 가장 좋은 방법 (0) | 2020.11.24 |
Python에서 XML을 JSON으로 변환하는 방법은 무엇입니까? (0) | 2020.11.24 |