上下文
我创建了一个 ApiService
类来处理我们的自定义 API 查询,同时使用我们自己的序列化程序和其他功能。
ApiService
的构造函数签名是:
constructor(metaManager: MetaManager, connector: ApiConnectorService, eventDispatcher: EventDispatcher);
MetaManager
是一种处理 api 元数据的可注入(inject)服务。ApiConnectorService
是一种包装Http
以添加我们的自定义 header 和签名系统的服务。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
]
});
}));
所有测试都失败并出现此错误:
Error: Can't resolve all parameters for ApiService: (MetaManager, ?, EventDispatcher).
- 如果我从加载的测试中删除
api-connector-service.spec.ts
(ApiConnectorService
的规范文件),ApiService
' s 测试将成功。 - 如果我从加载的测试中删除
api-service.spec.ts
(ApiService
的规范文件),ApiConnectorService
的测试会成功的。
为什么会出现这个错误?我的两个文件之间的上下文似乎有冲突,我不知道为什么以及如何解决这个问题。
最佳答案
使用 Jest?
万一有人来到这里并且你正在使用 Jest 来测试你的 Angular 应用程序(希望我们是越来越少的人),如果你没有发出装饰器(“emitDecoratorMetadata”:true
)。您需要更新 tsconfig.spec.json
文件,使其看起来像:
{
"extends": "../../tsconfig.json",
"compilerOptions": {
"emitDecoratorMetadata": true,
"outDir": "../../out-tsc/spec",
"types": [
"jest",
"node"
]
},
"files": [
],
"include": [
"**/*.spec.ts",
"**/*.d.ts"
]
}
关于angular - 测试 - 无法解析 (ClassName) 的所有参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39472364/