如何用备用模拟服务器替换$ httpBackend?

时间:2016-04-29 18:14:15

标签: javascript angularjs mocking

我正在使用ngMock进行Angular(1.2.x)单元测试。我的项目有一个依赖于sinon.fakeServer的夹具系统。对于我的单元测试,我更喜欢使用它而不是$httpBackend

ngMockE2E测试Angular提供了passthrough方法,但单元测试没有明确的等价方法。单元测试的基本原理seems to be永远不应该传递给服务器,但在我的情况下,我只是试图传递给非Angular-dependent-mock。

我现在的策略是创建一个匹配.whenGet.whenPost请求的填充程序,并将它们路由到我的虚假服务器。

然而,更好的是简单地“关闭”$httpBackend。有没有办法做到这一点?

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

This解决方案可能有效。

所以这个命题是使用ngMockE2E的$ httpBackend。实际上,如果您的测试导致XHR请求,那么它不是“单元测试”。