2014-09-24 57 views
0

我有一個簡單的服務:

.factory('list', function($q, $timeout) { 
    return { 
     get: function() { 
      var dfd = $q.defer(); 

      $timeout(function() { 
       dfd.resolve(['label1', 'label2']); 
      }, 10); 

      return dfd.promise; 
     } 
    }; 
}); 

,並希望對其進行測試。所以我創建了:

describe('list', function() { 

    var list, labels; 

    beforeEach(module('app')); 
    beforeEach(inject(function($q, _list_) { 
     list = _list_; 

     spyOn(list, 'get').and.callThrough(); 

     list.get().then(function(result) { 
      labels = result; 
     }); 
    })); 

    describe('getting list of labels', function() { 

     it('should return list of labels', function() { 
      expect(labels).not.toBe(undefined); 
      expect(Array.isArray(labels)).toBeTruthy(); 
     }); 

    }); 

}); 

但問題是,即使函數中的回調函數沒有執行,即使服務中的get方法返回promise。難道我做錯了什麼?我讀到了Jasmine的callFake方法,但說實話,我沒有看到使用它的一個要點。你能解釋一下使用它有什麼好處嗎?順便說一句,我有茉莉花2.0和角度嘲笑最新的角度。

+0

'beforeEach'將函數作爲參數。如果你希望它是異步的,那麼函數應該接受一個回調函數。檢查這個quetion http://stackoverflow.com/q/25598353/1197333 – Ivancho 2014-09-24 12:46:02

+0

我真的不明白它應該如何工作。我現在已經'beforeEach(function(done))',但我什麼時候該調用它?在'然後'裏面(那不起作用)或者在外面(都不)? – Przemek 2014-09-24 13:02:18

回答

0

答案很簡單,我忘了它。由於我使用$ timeout的事實,我應該在之後調用flush