我正在盯着一个Angular 5项目,它会为我的组件和服务自动生成一些规范单元测试。对于那些需要Apollo的组件,我收到错误NullInjectorError: No provider for Apollo!
我将Apollo模块添加到导入和声明部分,如下所示:
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [ ContractsDashboardComponent, Apollo ]
})
.compileComponents();
}));
但现在我收到了错误
Failed: Unexpected value 'Apollo' declared by the module 'DynamicTestModule'. Please add a @Pipe/@Directive/@Component annotation.
在普通应用中,我有一个模块GraphQLModule
,在构造函数中调用apollo.create
。我应该以某种方式嘲笑它吗?
答案 0 :(得分:1)
如果Apollo是一个模块,那么你应该导入它。
beforeEach(async(() => {
TestBed.configureTestingModule({
imports: [ Apollo ],
declarations: [ ContractsDashboardComponent ]
})
.compileComponents();
}));
如果它不是模块,它应该是提供者,所以你需要提供它:
beforeEach(async(() => {
TestBed.configureTestingModule({
providers: [ Apollo ],
declarations: [ ContractsDashboardComponent ]
})
.compileComponents();
}));
因为很明显,它不是一个组件(错误要求它有一个组件装饰器),但你已经进入了声明。
由于您的第一个错误是NullInjectorError: No provider for Apollo!
,我猜Apollo是您注入组件的服务,因此您应该使用第二种方法,并提供。