2016-04-29 27 views
5

我有Angular(1.2.x)單元測試,我正在使用ngMock。我的項目有一個夾具系統,依靠sinon.fakeServer。對於我的單元測試,我寧願使用這個,而不是$httpBackend

ngMockE2E測試Angular提供了一個passthrough方法,但是對於單元測試沒有明確的等價方法。基本原理seems to be單元測試不應該是傳遞(到服務器),但在我的情況下,我只是試圖通過一個非角依賴模擬。

我現在的策略是創建一個匹配.whenGet.whenPost請求並將它們路由到我的假服務器的墊片。

然而,這將是更好的僅僅是「關閉」的$httpBackend。有沒有辦法做到這一點?

+0

你嘗試'passThrough'? https://docs.angularjs.org/api/ngMockE2E/service/$httpBackend –

+0

我做了,這顯然只適用於'ngMockE2E'。 – vpiTriumph

回答

1

This解決方案可能工作。

所以命題是使用ngMockE2E的$ httpBackend。其實如果你的測試引起XHR請求,那不是'單元測試'。

+3

雖然這可能在理論上回答這個問題,[這將是更可取的](/ meta.stackoverflow.com/q/8259)在這裏包括答案的基本部分,並提供參考鏈接。 – manetsus

2

你可能想嘗試

angular.module('httpReal', ['ng']) 
    .config(['$provide', function($provide) { 
     $provide.decorator('$httpBackend', function() { 
      return angular.injector(['ng']).get('$httpBackend'); 
     }); 
    }]) 
    .service('httpReal', ['$rootScope', function($rootScope) { 
     this.submit = function() { 
      $rootScope.$digest(); 
     }; 
    }]); 

這樣你就可以恢復httpBackend。 欲瞭解更多詳情,請參閱:E2E mock $httpBackend doesn't actually passThrough for me