2015-02-06 2 views
1

, когда я пытаюсь проверить функцию, которая возвращает обещание я получаю следующее сообщение об ошибке:жасмин 2,0 тестирования angularjs фабричный метод, который возвращает обещание

"Error: Timeout - Async callback was not invoked within timeout specified by jasmine.DEFAULT_TIMEOUT_INTERVAL.

"

мой спецификации выглядит следующим образом:

describe('async promise test', function() { 

    beforeEach(module('app')); 

    beforeEach(function() { 
     jasmine.DEFAULT_TIMEOUT_INTERVAL = 6 * 1000; 
    }) 

    it('should match the name', function (done) { 
     inject(function ($rootScope,promiseTest) { 
      $rootScope.$apply(function(){ 
      var promise =promiseTest.checkPromise(); 
      promise.then(function(data){ 
      console.log(data); 
      done(); 
      }) 
     }) 
     }) 
    }) 
}); 

пожалуйста, проверьте ссылку plunker для полного кода plunker link

ответ

0

Вы используете модуль mock, который переопределяет $timeout, так что тесты повторяемы (ref)!

Вы должны использовать $timeout.flush(1000);$apply() избыточна):

it('should match the name', function (done) { 
    inject(function (promiseTest,$timeout) { 
    var promise =promiseTest.checkPromise(); 
    promise.then(function(data){ 
     console.log(data); 
     done(); 
    }); 
    $timeout.flush(1000); 
    }); 
}); 

См раздвоенный шлепнуть: http://plnkr.co/edit/J1EmU7yuCETBd8w9mS1R?p=preview

0

Вы должны впрыскивать $ таймаут в тесте, и промойте его:

inject(function ($rootScope,promiseTest, $timeout) { 
     $rootScope.$apply(function(){ 
     var promise =promiseTest.checkPromise(); 
     console.log("Created promise") 
     promise.then(function(data){ 
     console.log(data); 
     done(); 
     }) 
    }); 
    $timeout.flush(); 

Смотрите модифицированную plunker здесь:

http://plnkr.co/edit/psBl6nROkXHrD1iExKAQ?p=preview

+0

hey carl, на самом деле я пытаюсь проверить индексированный db, он не работает должным образом .... ссылка: http://plnkr.co/edit/dSdapvqTgR7qPeZC0umT?p=preview –

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