2014-06-24 169 views
0

我三重檢查一切,還有似乎是一個錯誤

服務:

angular.module('app.services') 
     .factory('eventService', ['$http', '$q', function($http, $q) { 
       return { 
        get: function() { 
         var deffered = $q.defer(); 

          $http.get('x') 
          .success(function(data) { 
           deffered.resolve(data); 
          }) 
          .error(function(){ 
           deffered.reject("could not access events"); 
          }); 

          return deffered.promise; 
        } 
       }; 
      }]) 

單元測試:

describe('when fetching events by service', function() { 
    var service; 
    var $httpBackend; 
    var appConfig; 
    beforeEach(function() { 
     module("ngMockE2E"); 
     module("app.services"); 
     inject(function(eventService, _$httpBackend_) { 
      service = eventService; 
      $httpBackend = _$httpBackend_; 
     }); 
    }); 
    it('should get items', function(){ 
      $httpBackend.expectGET('x').respond([{ name : 1}]); 
      var promise = service.get(); 
      promise.then(function(data){ 
       console.log(data); 
      }); 

      $httpBackend.flush(); 
     }); 
}); 

我正在以下錯誤的.flush()

Error: No pending request to flush !                                                        
      at /test/lib/angular-mocks.js:1148                                             
      at /test/unit/services/EventServiceSpec.js:26  

另外我如何確保$ httpBackend設置正被eventService使用。那eventService是由$ httpBackend的依賴而不是$ http生成的嗎?我認爲我可能是錯誤的原因。

+0

沒有你它得到工作? –

回答

0
$httpBackend.whenGET('x').respond([{ name : 1}]); // when you receive a request expectation, respond X 
$httpBackend.expectGET('x').respond([{ name : 1}]); // add a request expectation and respond X 
$httpBackend.expectGET('x'); // add a request expectation 

因此,您只是在提出請求時設置行爲,而不是實際添加該請求期望。

您需要使用:

$httpBackend.expectGET('x').respond([{ name : 1}]); 

$httpBackend.whenGET('x').respond([{ name : 1}]); 
$httpBackend.expectGET('x'); 
+0

嘿@Diego謝謝你的回答。我明白.expectGET和whenGET之間的區別。然而,我仍然得到相同的錯誤,我認爲它是因爲我認爲我沒有正確設置/注入服務,因爲我仍然在你提出的改變後得到相同的錯誤。 – frictionlesspulley