반응형
재스민 유닛 테스트에서 $q. 모든 약속을 어떻게 해결합니까?
컨트롤러의 코드는 다음과 같습니다.
$q.all([qService.getData($scope.id), dService.getData(), qTService.get()])
.then(function (allData) {
$scope.data1 = allData[0];
$scope.data2 = allData[1];
$scope.data3 = allData[2];
});
유닛 테스트에서는 다음과 같은 작업을 하고 있습니다.
beforeEach(inject(function($rootScope, $q, $location){// and other dependencies...
qServiceSpy = spyOn(_qService, 'getData').andCallFake(function () {
var data1 = {
id: 1,
sellingProperty: 1,
};
var d = $q.defer();
d.resolve(data1);
return d.promise;
});
dServiceSpy = spyOn(_dService, 'getData').andCallFake(function () {
var data2 = [{ "id": "1", "anotherProp": 123 }];
var d = $q.defer();
d.resolve(data2);
return d.promise;
});
qTServiceSpy = spyOn(_qTService, 'get').andCallFake(function () {
var data3 = [{ id: 0, name: 'Rahul' }];
var d = $q.defer();
d.resolve(data3);
return d.promise;
});
rootScope = $rootScope;
});
이 테스트에서는 서비스가 호출되어 data1, data2가 정의되어 있지 않은지 확인합니다.
it('check if qService' got called, function() {
expect(scope.data1).toBeUndefined();
rootScope.$digest();
expect(_quoteService.getQuote).toHaveBeenCalled();
});
it('check if "data1" is defined', function () {
expect(scope.data1).toBeUndefined();
rootScope.$digest();
expect(scope.data1).toBeDefined();
});
문제는 컨트롤러의 개별 서비스 콜을 Q.all 및 테스트에서 교체할 때까지 정상적으로 동작하고 있었다는 것입니다.scope.$apply
와 함께rootScope.$digest
q.all과rootScope.$digest
(사용방법)scope.$apply
또한) 두 테스트 모두 오류로 인해 실패합니다.
$420() 반복 횟수 10에 도달했습니다.중단!
제거한다면rootScope.$digest
그러면 약속은 절대 해결되지 않고 테스트는 실패한다.
정의되지 않은 정의입니다.
도움말이 있으면 유닛에서 코드를 테스트하는 방법q.all
?
하지만 그것 또한 도움이 되지 않는다 왜냐하면 나는 이미 사용하려 하고 있기 때문이다.$digest
.
퍼팅을 시도해 보세요.$rootScope.$apply()
에 있어서afterEach()
콜백 함수약속 해결 날짜:$apply()
앵귤러로.
afterEach(function(){
rootScope.$apply();
});
언급URL : https://stackoverflow.com/questions/16316940/how-to-resolve-q-all-promises-in-jasmine-unit-tests
반응형
'source' 카테고리의 다른 글
리액트 후크: 빈 배열을 인수로 사용해도 useEffect()가 두 번 호출됩니다. (0) | 2023.04.02 |
---|---|
MongoDB의 트랜잭션 부족 문제를 어떻게 해결할 것인가? (0) | 2023.04.02 |
치명적 오류: 의 '루프' 또는 '스위치' 컨텍스트에 '브레이크'가 없습니다. (0) | 2023.04.02 |
AngularJS - ng-repeat으로 커스텀필터를 구조화하여 아이템을 조건부로 반환하는 방법 (0) | 2023.04.02 |
리액트 및 웹 팩을 사용하여 Favicon 추가 (0) | 2023.04.02 |