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

Javascript 如何用备用模拟服务器替换$httpBackend?,javascript,angularjs,mocking,Javascript,Angularjs,Mocking,我使用ngMock进行角度(1.2.x)单元测试。我的项目有一个fixture系统,它依赖于sinon.fakeServer。对于我的单元测试,我更喜欢使用它,而不是$httpBackend ngMockE2Etests提供了一种passthrough方法,但是对于单元测试没有明确的等效方法。单元测试不应该通过(服务器)的基本原理,但在我的情况下,我只是尝试通过非角度相关的模拟 我现在的策略是创建一个匹配.whenGet和.whenPost请求的垫片,并将它们路由到我的假服务器 然而,更好的方法

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

ngMockE2E
tests提供了一种
passthrough
方法,但是对于单元测试没有明确的等效方法。单元测试不应该通过(服务器)的基本原理,但在我的情况下,我只是尝试通过非角度相关的模拟

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

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

解决方案可能会奏效

因此,建议使用ngMockE2E的$httpBackend。实际上,如果您的测试导致XHR请求,那么它不是一个“单元测试”。

您可能想尝试一下

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。
有关更多详细信息,请参阅:

您是否尝试了
passThrough
?我确实这样做了,这显然只适用于
ngMockE2E
。虽然这在理论上可以回答这个问题,但在这里包括答案的基本部分,并提供链接供参考。