angular 如何知道 $httpBackend 正在替换 angularjs 测试中的 $http?

How does angular know that $httpBackend is replacing $http in angularjs tests?

我有一个名为 myFactory 的工厂,它具有依赖项 $http。在我的测试中,我想模拟这种依赖。我发现我可以使用 $httpBackend 来实现它。我确实使用了下面的代码并且它有效。但我不明白为什么。在什么时候 angular 知道 httpBackend 实际上正在替换 myFactory 中的 $http?

beforeEach(inject(function(_myFactory_, _$httpBackend_){
    myFactory = _myFactory_;
    $httpBackend = _$httpBackend_;
}));

它并没有取代 $http,而是取代了一个名为 $httpBackend 的服务,您从未使用过该服务,因为它仅在内部使用。 Angular 使用了很多 'private' 服务。所以 $http 通常注入真实的 $httpBackend 但是当加载 angular-mocks.js 时(在 angular.js 之后,顺序很重要)它基本上用模拟的 $httpBackend 覆盖了真实的 $httpBackend .