使用qunit和httpBackend进行角度测试

时间:2014-02-09 00:09:41

标签: angularjs qunit

我整天都在苦苦挣扎。这是我的测试

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调用时,它会失败。我必须错误地设置测试。

2 个答案:

答案 0 :(得分:2)

我没有得到Angular模拟中的$ httpBackend是角度本身的$ httpBackend的包装器。您只需要实例化它并将其设置为以您想要的方式拦截$ http调用。也就是说,我仍然无法获得$ httpBackend.flush()的工作。角度测试并不像宣传的那样容易。

答案 1 :(得分:0)

$http$httpBackend是两个不同的服务。 $http使用$httpBackend$http是具有put()方法的服务。

所以,以下几行没有意义:

service.$http = httpBackend;