Лучшее решение для тестирования угловых сервисов с использованием 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.