2012-10-02 27 views
8

我正在爲我們的應用程序編寫一些測試,並且我已經包含了angularjs-mocks.js,因此我可以使用它附帶的很好的dsl函數。使用angularjs mocks而不實際嘲弄任何東西

但我不想真正模擬$ http請求,因爲我將這個應用程序與客戶端的後端集成在一個不斷變化的環境中,我想測試真實的響應。

在這種情況下,使用真實http後端的最好方法是什麼?

編輯:

我已經找到了一個潛在的解決方案,這是使用:

$httpBackend.whenPOST(/.*/).passThrough() 

但正如我提到的下方,它不工作,可能壞了?我得到這個錯誤:

Error: Unexpected request: POST /some/url/here No more request expected 

我這裏開一個問題:https://github.com/angular/angular.js/issues/1434

+0

你總是可以創建一個模擬$ http注入通過創建一個簡單的JavaScript,做XHR http請求,沒有角度嘲笑必要的。在JavaScript中測試是一件好事,因爲動態類型的原因,你可以將對象打成一團,然後注入它們。 –

+0

沒錯,但問題是angularmocks覆蓋$ httpBackend,$ http使用。我現在試圖用$ httpBackend.whenGET(/.*/)。passThrough()來解決它,但是看起來好像是壞了,或者我沒有正確使用它。 – doubledriscoll

+0

我猜我在暗示的是你可以使用vanilla js來創建一個包含你需要的所有方法的對象。不需要角模擬。 –

回答

2

我想出了一個快速和骯髒的解決問題的方法:在角度談到了其中$ httpBackend被重寫行(1365 -mocks-1.0.2.js)。

angular.module('ngMock', ['ng']).provider({ 
    $browser: angular.mock.$BrowserProvider, 
    $exceptionHandler: angular.mock.$ExceptionHandlerProvider, 
    $log: angular.mock.$LogProvider, 
    //$httpBackend: angular.mock.$HttpBackendProvider, 
    $rootElement: angular.mock.$RootElementProvider 
}).config(function($provide) { 
    $provide.decorator('$timeout', function($delegate, $browser) { 
    $delegate.flush = function() { 
     $browser.defer.flush(); 
    }; 
    return $delegate; 
    }); 
}); 

這可能打破別的東西,但它讓我考什麼我需要測試,並且不影響生產應用程序,所以它跟我沒關係。希望未來會有內置的方式來做到這一點。

+0

這很醜陋。很遺憾沒有更好的辦法.. – stej