für eine Komponente einen Komponententest Schreiben, die einen Dienst mit einem emit innerhalb des Konstruktors verwendet wird, wie folgt aus:Angular2 Unit-Test-Service, der Wert bei Constructor Zeit Emit
@Injectable()
export class Service1 {
public onService1Done: EventEmitter<any> = new EventEmitter();
public constructor(...) {
this.onService1Done.emit(value);
}
}
Ich bemerke, dass, nach dem, was ich hat in dem 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);
}));
});
}
der Konstruktor von Service1, und so die emit, wird aufgerufen, bevor ich die Zeichnung machen könnte, in der Prüfung;
gibt es eine Möglichkeit, dies zu vermeiden ?? um das Abonnement vor dem Konstruktor zu machen?
Wie immer, danke im Voraus.
Warum müssen Sie im Konstruktor ausgeben? Abgesehen davon [sollten Sie EventEmitter nicht in Ihren Diensten verwenden] (http://stackoverflow.com/questions/36076700/what-is-the-proper-use-of-an-eventemitter). Verwenden Sie einfache Observables. –
Also, wenn ich richtig verstehe, No EventEmitter in Constructor, weder in der Komponente oder Services. Aber, könnte die Verwendung eines Abonnements in einem Konstruktor richtig sein? – AntuJitsu
EventEmitters sind in den Komponenten in Ordnung, wenn Sie '@Output()' verwenden. Sie in Diensten zu verwenden, ist eine schlechte Übung. Abgesehen davon bleibt meine Frage: Warum willst du einen Wert im Konstruktor des Dienstes zum Testen ausgeben? –