2014-12-27 2 views
0

Я пытаюсь автоматизировать тестирование угловых сервисов, которые совершают вызовы 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 придется дождаться вызова для разбора для завершения до запуска цикла дайджеста
  • Я не могу найти другого решения, кроме как загрязнить код моей службы этим кодом
  • Я бы хотел найти устойчивое решение, которое не требует от меня обновления кода моей службы пройти тест.

Заранее спасибо, я потерял с этим, я могу отсутствовать что-то очевидное :-)

ответ

0

вызов $rootScope.$apply(); в самом тесте, а не в реализации обещания. Тесты с done являются асинхронными, поэтому впоследствии можно решить их. Альтернативно используйте Угловой 1.3.

В целом для тестирования обещаний я, вероятно, рекомендовал бы mocha, а не Jasmine, так как он поддерживает тесты на обещание из коробки с заявлениями return.

+0

Привет, Бенджамин, посмотрим прокомментированную строку, когда я вызываю $ rootScope. $ Apply() изнутри теста, он вызывается до того, как обещание было разрешено и, таким образом, не имеет никакого эффекта. – Danielito

+0

Какую версию Angulr вы используете? –

+0

Я фактически использую Ionic Framework, который, похоже, использует Angular 1.2 в версии, которую я сейчас установил. Предполагается ли, что 1.3 должно вести себя по-разному в отношении решения обещаний? – Danielito

 Смежные вопросы

  • Нет связанных вопросов^_^