为组件编写单元测试,该组件在构造函数中使用带有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;
有办法避免这种情况吗?在构造函数之前进行订阅?
一如既往,提前谢谢。
答案 0 :(得分:-1)
当DI创建服务实例时,我没有看到任何方式可以以任何方式订阅以获取此事件。
只是不要在构造函数中发出它或者至少使用一些setTimeout(...)
,至少同步执行代码有机会订阅,如果必须的话。