내 기능은 다음과 같습니다.
var myFunc = function(){
return functionReturningaPromise()
.then(function(){
//success, doesn't matter what happens here
})
.catch(function(err){
//handle error here and then throw to handle higher
throw new Error('Error in my function');
})
}
이 함수 내에서 오류를 처리 한 다음 더 높은 수준에서 처리하기 위해 오류를 발생시키는 함수가 필요합니다. 하지만 재스민으로 테스트하는 방법을 모르겠습니다. 테스트 약속을 제어하는 방법을 알고 있으며 기본 설정은 다음과 같습니다.
it('Should throw an error', inject(function(alert) {
var instance = instanceFactory.createInstance(someData);
var deferred = $q.defer();
spyOn(someFactory, 'someMethod').and.returnValue(deferred.promise);
//instance contains the throwing function above
instance.myFunc(otherData);
deferred.reject({data: '12 - error'});
$rootScope.$digest();
expect(instance.myFunc).toThrow();
}));
분명히 재스민은 오류를 찾지 못했습니다. 이 경우 오류 발생을 테스트하는 방법
$q
native throw
에서 잘 작동하지 않는 경우 $q
API를 사용 하여 프라 미스 체인 내에서 새 오류를 다시 던지거나 생성 해야합니다 . 읽어야 할 Q / A :
이 솔루션은 사용하는 것 return $q.reject('Error in my function')
대신에 throw new Error('Error in my function');
.
그러나 공개 된 질문은 그것을 어떻게 테스트 할 것인가입니다. 기본적으로 promise 체인을 사용 .catch()
하고 테스트에 하나 더 추가 하여 오류를 확인할 수 있으며 테스트는 Jasmine Async API를 사용 합니다 .
it('should throw an error', function (done) {
// ----- use Jasmine async API -------^^^
var instance = instanceFactory.createInstance(someData);
var deferred = $q.defer();
spyOn(someFactory, 'someMethod').and.returnValue(deferred.promise);
// here we continue catching and check the error
var promise = instance.myFunc(otherData);
promise.catch(function (err) {
expect(err).toBe('Error in my function');
done();
});
deferred.reject({data: '12 - error'});
$rootScope.$digest();
});
다음은 작동하는 샘플입니다 ( script.js
사이드 바에서 파일 열기 ).
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다