【发布时间】:2017-01-21 04:37:44
【问题描述】:
上下文
我创建了一个ApiService 类,以便能够处理我们的自定义 API 查询,同时使用我们自己的序列化程序和其他功能。
ApiService的构造函数签名是:
constructor(metaManager: MetaManager, connector: ApiConnectorService, eventDispatcher: EventDispatcher);
-
MetaManager是一个处理 api 元数据的可注入服务。 -
ApiConnectorService是一项服务,它包装Http以添加我们的自定义标头和签名系统。 -
EventDispatcher基本上是 Symfony 的事件调度系统,在 typescript 中。
问题
当我测试ApiService 时,我在beforeEach 中进行初始化:
beforeEach(async(() => {
TestBed.configureTestingModule({
imports : [
HttpModule
],
providers: [
ApiConnectorService,
ApiService,
MetaManager,
EventDispatcher,
OFF_LOGGER_PROVIDERS
]
});
}));
而且效果很好。
然后我添加我的第二个规范文件,即ApiConnectorService,这个beforeEach:
beforeEach(async(() => {
TestBed.configureTestingModule({
imports : [HttpModule],
providers: [
ApiConnectorService,
OFF_LOGGER_PROVIDERS,
AuthenticationManager,
EventDispatcher
]
});
}));
并且所有测试都因此错误而失败:
错误:无法解析 ApiService 的所有参数:(MetaManager, ?, EventDispatcher)。
- 如果我从加载的测试中删除
api-connector-service.spec.ts(ApiConnectorService的规范文件),ApiService的测试将成功。 - 如果我从加载的测试中删除
api-service.spec.ts(ApiService的规范文件),ApiConnectorService的测试将成功。
为什么会出现这个错误?我的两个文件之间的上下文似乎有冲突,我不知道为什么以及如何解决这个问题。
【问题讨论】:
标签: angular karma-jasmine angular2-services angular2-testing angular2-injection