在构造函数时发出值的 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(...)
至少同步执行的代码有机会在必要时订阅。
正在为组件编写单元测试,该组件在构造函数中使用带有 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(...)
至少同步执行的代码有机会在必要时订阅。