Използвам $q.when за обгръщане на други lib обещания. Работи като чар, но когато се опитам да го стартирам в Karma, обещанието не успява да се разреши (done() никога не се изпълнява), дори ако стартирах $digest и дори след таймаут. Ето примерен код:
describe('PouchDB', function () {
var $q, $rootScope;
beforeEach(inject(function (_$rootScope_, _$q_) {
$rootScope = _$rootScope_;
$q = _$q_;
}));
it("should run", function (done) {
function getPromise() {
var deferred = Q.defer();
deferred.resolve(1);
return deferred.promise;
}
$q.when(getPromise())
.then(function () {
done(); // this never runs
});
$rootScope.$digest();
});
Защо? Каква е причината за това? Наистина не мога да го получа.
Актуализация (заобиколно решение)
Не разбирам защо $q.when не е разрешено в Karma - има нещо с функцията nextTick, но не мога да отстраня проблема. Вместо това се отказах от $q.when и написах проста функция, която преобразува PouchDB (или всяка друга като Q) в $q:
.factory('$utils', function ($q, $rootScope) {
return {
to$q: function (promise) {
var deferred = $q.defer();
promise.then(function (result) {
deferred.resolve(result);
$rootScope.$digest();
});
promise.catch(function (error) {
deferred.reject(error);
$rootScope.$digest();
});
return deferred.promise;
}
}
})