3

我想替换 Web 应用程序在运行时提供的一项服务以进行测试。有一个服务连接到在某些本地环境中不可用的外部服务,我只想执行一个命令来用模拟替换它。

我已经看到我可以通过调用在运行时从 AngularJS 获得任何服务:

> angular.element('html').injector().get('myService')

但我想知道是否有办法用其他东西替换“myService”。

我知道创建一个公开“myService”的“myServiceWrapper”可以让我通过以下方式轻松替换它:

> angular.element('html').injector().get('myServiceWrapper').myService = new Whatever();

但我想避免对已经运行的应用程序进行更改。

4

1 回答 1

2

你有几个选择。首先,您可以只声明一个具有相同名称的新服务(在已声明原始服务之后)。由于 Angular 目前没有命名空间的概念,因此您的新服务将覆盖旧服务。

其次,您可以使用装饰器来修改服务的某些部分。

最后,ngMockE2E模块还可以让您将 $httpBackend 替换为模拟的,以使用当前存在的服务,但保留对外部提供程序的任何调用。

于 2014-05-21T16:47:52.833 回答