Лучшее решение для тестирования угловых сервисов с использованием Parse SDK с кармой
0 Danielito [2014-12-27 20:08:00]
Я пытаюсь автоматизировать тестирование услуг Angular, которые совершают вызовы Parse.com через 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();
});
Итак, ситуация следующая:
- Мне нужно дождаться завершения разговора, прежде чем запускать цикл дайджеста
- Я не могу найти какое-либо другое решение, кроме как загрязнить мой код службы этим кодом
- Я бы хотел найти устойчивое решение, которое не требует, чтобы я обновил свой код обслуживания, чтобы пройти тест.
Спасибо заранее, я проиграл с этим, возможно, я пропустил что-то очевидное :-)
angularjs jasmine parse.com karma-jasmine
1 ответ
0 Benjamin Gruenbaum [2014-12-28 14:39:00]
Вызов $rootScope.$apply();
в самом тесте, а не в реализации обещаний. Тесты с done
асинхронными режимами, поэтому его можно разрешить впоследствии. Альтернативно используйте Угловой 1.3.
В общем, для тестирования обещаний я, вероятно, рекомендую мокко, а не Жасмин, поскольку он поддерживает тесты на обещание из коробки с операторами return
.