Потому что вы никогда не запускаете подписку.
Я не знаю, какой у вас сервис, но мы воспользуемся тем, что вы не используете операторы ограничения, такие как take
или takeUntil
.
Начните с насмешки вашего наблюдаемого как горячего потока с Subject
:
component['communication'] = new Subject() as any;
Теперь у вас должен быть новый экземпляр вашего компонента в каждом тесте благодаря приспособлению createComponentInstance
звонил перед каждым.Это означает, что вы уже позвонили ngOnInit
и создали подписку.
Поскольку поток горячий, вы можете подписаться на него в своем тесте:
it('should navigate', done => {
component['communication'].subscribe(() => {
expect(routerSpy.navigate).toHaveBeenCalledWith(["/success"]);
done();
});
(component['communication'] as Subject).next(true);
});
При вызове next
вы запускаете подписки, запускаете маршрутизатор и ожидаете, что он будет иметьбыл вызван.
(PS: я использовал синтаксис массива и Subject
, чтобы изобразить проблему, не стесняйтесь использовать все, что вы хотите, чтобы инициировать подписку и высмеивать ваши зависимости)