1
나는 indexedDB를 여는 함수를 작성했다. 나는 이것을 처리하는 가장 깨끗한 방법이라고 생각하기 때문에 약속을 사용하고 있습니다.AngularJS : 콜백 함수에서 해결 된 약속을 테스트하는 방법
이describe('finalize', function() {
it('should initialize the database', function(done) {
var promise = resource.finalize();
promise.then(function() {
console.log('resolved');
var transaction = resource.db.transaction(['Component']);
expect(transaction).toBeDefined();
done();
});
$rootScope.$apply();
});
});
이 콘솔에 'Success!'
를 인쇄하지만 약속이 해결되지 않습니다이를 테스트하기 위해
this.$get = function($q, $rootScope, $window) {
return {
finalize: function() {
var deferred = $q.defer();
var dbRequest = $window.indexedDB.open(dbName, dbVersion);
dbRequest.onupgradeneeded = function(event) {
// XXX do something here.
};
dbRequest.onsuccess = function(event) {
db = event.target.result;
console.log('Success!');
deferred.resolve(event);
};
dbRequest.onerror = deferred.reject;
return deferred.promise;
}
};
};
, 나는 다음과 같은 테스트 함수를 만들었습니다.
$rootScope.$apply()
을 onsuccess 함수의 끝 부분으로 이동하면 약속은 해결되지만 하나의 테스트에서만 해결됩니다. 다른 테스트에서는 오류 Error: [$rootScope:inprog] $digest already in progress
가 발생합니다.
이 약속은 어떻게 해결해야합니까? 콜백 함수가 더 좋습니까?
이 솔루션을 사용해 보았지만 제공된 오류 메시지와 함께 계속 실패합니다. '$ httpBackend.flush();와 결합 할 때 실패한 것으로 나타났습니다. –