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

How to substitute $httpBackend with alternate mock server?

本文关键字:替换 httpBackend 服务器 模拟 何用 备用      更新时间:2023-09-26

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

ngMockE2E测试Angular提供了一个passthrough方法,但是对于单元测试没有明确的等效方法。基本原理似乎是单元测试永远不应该通过(到服务器),但在我的情况下,我只是试图通过一个非角度相关的mock。

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

然而,最好是简单地"关闭"$httpBackend。有办法做到这一点吗?

您可能想要尝试

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';t实际上通过了

此解决方案可能有效。

因此,建议使用ngMockE2E的$httpBackend。实际上,如果您的测试导致XHR请求,它就不是"单元测试"。