Библиотека тестирования angular: как протестировать службу подписки в компоненте
Я хочу протестировать несколько действий, сделанных после выполнения createOrder, я пробую несколько вариантов использования, ни один из них не работает, может кто-нибудь дать мне хороший путь к успеху, пожалуйста:).
Мой компонент:
export class OrderStepComponent implements OnInit {
...
onCreateOrder(shoppingCart: IShoppingCartView): void {
// TODO when error toast notification
const order: Order = mapShoppingCartToOrder(shoppingCart);
this.orderService.createOrder(order).subscribe(() => {
console.log('subscribe');
this.messageService.success(TOAST\_MESSAGE.messages.orderCreated, this.configService.configuration.toastMessageDurationInMilliseconds);
this.userService.cleanUser();
this.router.navigate(['/']);
});
}
...
}
Мой тест:
fit(`should clean user, reload user, and redirect to {'/'} when order created`, async (done) => {
const cleanUserSpy = spyOn(UserService.prototype, 'cleanUser');
const loadUserSpy = spyOn(UserService.prototype, 'loadUser');
const createOrderResult$: Observable<void> = of();
const createOrderSpy = spyOn(OrderService.prototype, 'createOrder').and.returnValue(createOrderResult$).and.callThrough();
....
await createOrderResult$.subscribe(() => {
// => this code is never reached
console.log('ok');
expect(cleanUserSpy).toHaveBeenCalled();
expect(loadUserSpy).toHaveBeenCalled();
expect(navigateSpy).toHaveBeenCalledWith(['']);
});
await click(getAllByText('shoppingCart.summary.button.validate')[0]);
await expect(createOrderSpy).toHaveBeenCalledWith({ modules: modulesAdded });
done();
...
}