2014-02-09 91 views
0

我一直在與蜜蜂拼搏。這裏是我的測試qunit和httpBackend的角度測試

injector = angular.injector(['ngMock','ng', 'cockpit']); 
var equal = QUnit.assert.equal; 
test('loginService', function() { 
    var app, service, scope, httpBackend; 
    app = angular.module('cockpit'); 
    app.config(function ($provide) { 
     $provide.decorator('httpBackend', 
      angular.mock.e2e.$httpBackendDecorator); 
    }); 
    httpBackend = injector.get('$httpBackend'); 

    httpBackend.when("PUT", "/login").respond({ userId: 23 }); 

    service = injector.get('loginService'); 
    service.$http = httpBackend; 

    service.getUserId('easy', 'path'); 
    httpBackend.flush(); 
    equal(service.userId, 23, 'populates userId property'); 
}); 

裏面的getUserId方法$ HTTP服務還沒有放方法,所以當我提出$ http.put調用,它將失敗。我必須錯誤地設置測試。

回答

2

我沒有得到這樣的$ httpBackend在角嘲笑是爲$ httpBackend的角度本身的包裝。你只需要實例化它並設置它來以你想要的方式攔截$ http調用。這就是說,我仍然無法獲得$ httpBackend.flush()的工作。角度測試不像廣告那麼容易。

0

$http$httpBackend是兩個不同服務。 $http使用$httpBackend$http是具有put()方法的服務。

那麼,下面這行沒有任何意義:

service.$http = httpBackend; 
+0

這就是我的觀點。如何使用$ http將$ httpbackend注入到服務中獲取數據的服務中?在$ httpBackend的AngularJS文檔中,它顯示了一個使用$ http的控制器和一個在其位置注入$ httpBackend的測試。當我嘗試這樣做時,我得到一個對象沒有put方法的錯誤。我可以看到$ httpBackend沒有put方法,那麼文檔中的示例如何工作? – pthalacker