出于测试目的,我想替换网络应用程序在运行时具有的一项服务。有一个连接到外部服务的服务在某些本地环境中不可用,我想只执行一个命令将其替换为模拟。
我已经看到我可以在运行时通过调用从 AngularJS 获得任何服务:
> angular.element('html').injector().get('myService')
但我想知道是否有办法用其他东西替换“myService”。
我知道创建一个公开“myService”的“myServiceWrapper”可以让我通过以下操作轻松替换它:
> angular.element('html').injector().get('myServiceWrapper').myService = new Whatever();
但我想避免对已经运行的应用程序进行更改。
最佳答案
您有几个选择。首先,您可以只声明一个具有相同名称的新服务(在已声明原始服务之后)。由于 Angular 目前没有命名空间的概念,您的新服务将覆盖旧服务。
其次,您可以使用 decorator修改部分服务。
最后,ngMockE2E模块还可以让您将 $httpBackend 换成一个模拟的,以使用当前存在的服务,但停止对外部提供商的任何调用。
关于angularjs - 在 AngularJS 中以编程方式在运行时替换服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23789193/