Angular2单元测试在构造函数时间发出值的服务

时间:2016-03-25 11:39:08

标签: unit-testing angular eventemitter

为组件编写单元测试,该组件在构造函数中使用带有emit的Service,如下所示:

@Injectable()
export class Service1 {
  public onService1Done: EventEmitter<any> = new EventEmitter();
  public constructor(...) {
    this.onService1Done.emit(value);
  }
}

我注意到,根据我在component.spec.ts中的内容:

beforeEachProviders(() => {
  return [
    provide(Service1, { useClass: MockService1 }),
    Component1
  ];
});

  it("check that XXX", inject(
    [Service1, Component1], (service1: Service1, component1: Component1) => {
    service1.onService1Done.subscribe({ next: () => DoSomething() });
    expect(DoSomething()).toEqual(IsDone);
  }));
});
}

在我可以在测试中进行订阅之前,将调用Service1的构造函数,以及emit;

有办法避免这种情况吗?在构造函数之前进行订阅?

一如既往,提前谢谢。

1 个答案:

答案 0 :(得分:-1)

当DI创建服务实例时,我没有看到任何方式可以以任何方式订阅以获取此事件。

只是不要在构造函数中发出它或者至少使用一些setTimeout(...),至少同步执行代码有机会订阅,如果必须的话。