具有服务依赖性的Angular2组件单元测试

时间:2017-04-27 21:14:48

标签: unit-testing angular service dependency-injection jasmine

所以我有这个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上的演示代码完全相同。不知道如何前进......

0 个答案:

没有答案