Библиотека тестирования 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();
...
}

0 ответов

Другие вопросы по тегам