반응형
Angular에서 브로드캐스트 이벤트를 테스트하려면 어떻게 해야 합니까?JS
루트 스코프에서 브로드캐스트이벤트를 내보내는 컨트롤러가 있어요브로캐스트 이벤트가 올바르게 발사되었는지 테스트하고 싶습니다.
컨트롤러의 코드는 다음과 같습니다.
$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);
여기 모카제, 모크에는 시논, 기대에는 채를 사용하는 방법이 있습니다.
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
반응형
'source' 카테고리의 다른 글
데이터베이스에서 JSON 저장 및 쿼리 (0) | 2023.03.25 |
---|---|
리액트 라우터 v6에서 리다이렉트하려면 어떻게 해야 하나요? (0) | 2023.03.25 |
wp-config를 사용하여 워드프레스로 SSL을 올바르게 강제합니다.php (0) | 2023.03.25 |
MongoDB에서 컬렉션을 CSV로 내보내려면 어떻게 해야 합니까? (0) | 2023.03.25 |
AngularJS 글로벌http 폴링 서비스 (0) | 2023.03.20 |