我整天都在苦苦挣扎。这是我的测试
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服务没有put方法,所以当我进行$ http.put调用时,它会失败。我必须错误地设置测试。
答案 0 :(得分:2)
我没有得到Angular模拟中的$ httpBackend是角度本身的$ httpBackend的包装器。您只需要实例化它并将其设置为以您想要的方式拦截$ http调用。也就是说,我仍然无法获得$ httpBackend.flush()的工作。角度测试并不像宣传的那样容易。
答案 1 :(得分:0)
$http
和$httpBackend
是两个不同的服务。 $http
使用$httpBackend
。 $http
是具有put()
方法的服务。
所以,以下几行没有意义:
service.$http = httpBackend;