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

Angular2 Unit test Service that Emit value at Constructor Time

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

@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;

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

一如既往,提前致谢。

当服务实例由 DI 创建时,我看不出有什么可以以任何方式订阅来获取此事件。

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