Я пытаюсь автоматизировать тестирование угловых сервисов, которые совершают вызовы Parse.com через Parse SDK.Лучшее решение для тестирования угловых сервисов с использованием Parse SDK с кармой
Проблема, с которой я столкнулся, заключается в том, что обещания не будут решены, если я явно не вызову цикл дайджеста, и как мои услуги не будут выполнены, я должен сделать это в своих реализациях служб, которые не являются устойчивыми.
Мой код услуги заключается в следующем:
factory('myService', function($http, $q, $rootScope) {
var myService = {};
myService.simplePromiseTest = function() {
var p = $q.defer();
var query = new Parse.Query("AnyObjectInParse");
query.find().then(function(results){
p.resolve(results);
// *** I have to include that line for the jasmine test to run ***
$rootScope.$apply();
});
return p.promise;
}
}
return myService;
}
А вот мой жасмин тест
async.it('should resolve the promise', function(done) {
myService.simplePromiseTest().then(function(results) {
// this is never called if don't trigger the digest from the service code
done();
});
// This line is use less as when I get into that line, the promise is not resolved.
// $scope.$root.$digest();
});
Так что ситуация выглядит следующим образом:
- I придется дождаться вызова для разбора для завершения до запуска цикла дайджеста
- Я не могу найти другого решения, кроме как загрязнить код моей службы этим кодом
- Я бы хотел найти устойчивое решение, которое не требует от меня обновления кода моей службы пройти тест.
Заранее спасибо, я потерял с этим, я могу отсутствовать что-то очевидное :-)
Привет, Бенджамин, посмотрим прокомментированную строку, когда я вызываю $ rootScope. $ Apply() изнутри теста, он вызывается до того, как обещание было разрешено и, таким образом, не имеет никакого эффекта. – Danielito
Какую версию Angulr вы используете? –
Я фактически использую Ionic Framework, который, похоже, использует Angular 1.2 в версии, которую я сейчас установил. Предполагается ли, что 1.3 должно вести себя по-разному в отношении решения обещаний? – Danielito