我需要一种在Angular 2开发期间(而不是在测试期间)模拟我的服务的方法。原因是REST-ful服务器不可靠(更改API没有通知,不稳定,难以擦除和站立再次)。如果我可以模拟我的服务(基本上都是HTTP REST客户端),那将是很好的。
在Angular 2中创建模拟后端服务的最佳方法是什么?我在测试方面有很多关于模拟后端服务的互联网结果,但这个上下文不是我的用例(我不是在嘲笑测试而是开发)。
我已经使用angular cli来创建和支持我的项目,我不确定该工具是否可以提供帮助。
我正在寻找像Spring这样的方法,我们可以用“profiles”注释组件/类,然后方便地指定哪个配置文件是活动的,以便注入正确的依赖项。
答案 0 :(得分:6)
我认为实现目标的最佳方法是使用接口和服务提供商。我希望以下示例代码可以指出正确的方向:
数据-tables.service-interface.ts 强>
export interface DataTablesServiceInterface {
getHeaders(): Promise<any[]>;
getData(query?: string, offset?: number, size?: number): Promise<any>;
}
数据-tables.service-provider.ts 强>
import { Http } from '@angular/http';
import { OpaqueToken } from '@angular/core';
import { DataTablesServiceInterface } from './data-tables.service-interface';
import { DataTablesService } from './data-tables.service';
import { DataTablesMockService } from './data-tables.mock-service';
import { environment } from '../../../environments/environment';
let dataTablesServiceFactory = (http: Http) => {
var serviceToReturn: DataTablesServiceInterface;
if (environment.production) {
serviceToReturn = new DataTablesService(http);
} else {
serviceToReturn = new DataTablesMockService();
}
return serviceToReturn;
};
export let dataTablesToken = new OpaqueToken('DataTablesServiceInterface');
export let dataTablesServiceProvider =
{
provide: dataTablesToken,
useFactory: dataTablesServiceFactory,
deps: [
Http
]
};
您只需要实现实际和模拟服务,并可以使用environment
取决于已在angular-cli中实现的嵌入式配置文件机制来提供它们。
修改强>
还有一些我忘了提及的信息。在您的负责模块中,您需要将dataTablesServiceProvider
声明为提供者。在您要使用该服务的组件中,DI的方法与标准方法略有不同。
在组件的构造函数中,您编写以下内容:
constructor(@Inject(dataTablesToken) private dataTablesService: DataTablesServiceInterface)
如果您对不透明的令牌感兴趣,我建议您查看Opaque Token by Angular