所以我有这个PromptComponent,内容将由服务数据更新。 现在我正在尝试对具有此服务依赖性的此组件进行单元测试。 这是组件:
export class PromptComponent {
@Input() module: any;
@select() selectedPrompt;
constructor(private moduleService: ModuleService){}
}
这是服务:
getQuote(): Promise<string> {
return new Promise(resolve => {
setTimeout( () => resolve(this.nextQuote()), 500 );
});
}
private nextQuote() {
if (this.next === quotes.length) { this.next = 0; }
return quotes[ this.next++ ];
}
这是单元测试代码:
beforeEach(() => {
TestBed.configureTestingModule({
declarations: [
PromptComponent,
],
providers: [ ModuleService]
});
fixture = TestBed.createComponent(PromptComponent);
component = fixture.componentInstance;
const moduleService = fixture.debugElement.injector.get(ModuleService);
spy = spyOn(moduleService, 'getQuote').and.returnValue(Promise.resolve(testService));
我提到了角度文档的官方演示 https://angular.io/resources/live-examples/testing/ts/eplnkr.html,在TwainComponent.spec中。
非常奇怪的是,正如预期的那样,在官方演示中,TwainComponent测试顺利通过。但另一方面,我得到了这个奇怪的injectionError。如果我删除构造函数中的参数,我可以创建fixture实例,但是当它运行时注入inject.get()部分时会出现注入错误。但是只要我将private moduleService:ModuleService
放回到组件构造函数中,我就会得到未定义的夹具以及注入错误。
这意味着我甚至无法将代码执行到实际的服务注入部分(fixture.debugElement.injector.get(ModuleService)
),我已经收到了错误。
有人有同样的问题吗? 我的代码几乎与Plunker上的演示代码完全相同。不知道如何前进......