В настоящее время я тестирую созданный мной простой компонент, который выглядит следующим образом:
@Input()
public type: string;
private saveSubscription: Subscription;
public ngOnDestroy(): void {
this.saveSubscription.unsubscribe();
}
public ngOnInit(): void {
this.onSave();
}
private onSave(): void {
this.saveSubscription = this.editService.saveSelection.subscribe(() => {
this.editService.type.next(this.type);
});
}
В моем тесте я хочу убедиться, что если я установлю ввод вручную, а затем вызову ngOnInit()
, значение, излучаемое editService
, будет равно моему значению.
it('should set up the subscription for saving', fakeAsync(() => {
// Arrange
component.type = 'full';
// Act
component.ngOnInit();
fixture.detectChanges();
mockedEditService.saveSelection.next();
// Assert
mockedEditService.type.subscribe(type => {
expect(type).toEqual(component.type);
});
}));
Я борюсь с тестированием асинхронного кода и не уверен, правильно ли я это делаю. Тест всегда проходит даже при неправильных тестовых случаях, и я подозреваю, что рассматриваемый код не ожидает разрешения подписки, прежде чем сделать свое утверждение.
Чтение англоязычных тестовых документов , я смог немного больше познакомиться, но мне было интересно, есть ли у вас какие-либо предложения.
Спасибо