2015-09-16 94 views
2

我在單元測試中遇到了一個奇怪的問題。 在控制器我有類似如何在我的情況下嘲笑http請求

testFactory.testFunction($scope.id) 
     .then(function(returnData) { 
      // do something with the return 
     }) 

廠文件

test.testFunction = function(id) { 
     return $http.get('/api/v.10/book/' + id + '/books'); 
}; 

單元測試

var books = {data: {id: 333, name: 'my book'}}; 

beforeEach(inject(function (_$controller_, _$httpBackend_, _$rootScope_, _testFactory_) { 
     scope  = _$rootScope_.$new(); 
     $httpBackend = _$httpBackend_; 
     testFactory = _testFactory_; 

     testCtrl = _$controller_('testCtrl', { 
      $scope: scope 
     }); 

     $httpBackend.whenGET('/api/v.10/book/333/books').respond(books); 
    })); 


it('should check if test runs', function() { 
     testFactory.testFunction(333).then(function(returnData){ 
       console.log(returnData) 
     }) 
     $httpBackend.flush(); 
    }) 

出於某種原因,在執行console.log爲 'returnData' 添加 '書'變量到一個對象,並添加標題,狀態...等響應。

例如:

Object{data: Object{data: Object{id: ..., name: ...}}, 
      status: 200, headers: function (name) { ... }, 
      transformResponse: [...], 
      url: '/api/v.10/book/333/books', statusText: ''} 

我只期待

{data: {id: 333, name: 'my book''}}我的反應。

有人可以幫我解決這個問題嗎?

非常感謝!

+1

'return'是Javascript中的保留字。這可能會導致一些問題,假設您實際使用它作爲您的變量名稱。 –

+0

謝謝,這只是一個不好的返回數據名稱。這是不是在我的真實代碼 – BonJon

回答

1

當使用respond帶有單個參數時,它應該是要返回到Web服務的數據對象as shown under when in the docs。所以你需要將你的books變量改爲{id: 333, name: 'my book'}

+0

感謝它現在的作品! – BonJon

相關問題