Вы следите за сервисом после вызова конструктора.
Конструктор вызывается при вызове метода compileComponents()
на вашем TestBed.
Итак, у вас есть следующие возможности:
Сначала вы можете создать службу-заглушку, которая уже возвращает определенную наблюдаемую величину, которая выдает значение X. Затем вы предоставите эту заглушку в TestBed с помощью {provide: YourService, useValue: serviceStub}
где serviceStub может выглядеть следующим образом: const serviceStub = {yourMethod: ()=> of(YOUR_TEST_VALUE}
Дело в том, что в вашем тестовом примере вы не сможете ожидать, что был вызван сервисный метод, но вы могли бы проверить, что испущенное значение из вашегонаблюдаемый был установлен внутри вашего компонента.Более того, в случае, если вы захотите изменить значение X для разных вариантов использования, вам нужно будет создать несколько описаний, каждое из которых будет иметь свою версию макета сервиса.
Лучшим способом imho было бы перенести подписку в ловушку жизненного цикла onInit.
Для вашего приложения это не будет иметь значения, и его будет проще тестировать.
Жизненный цикл onInit внутри теста вызывается при первом запуске fixture.detectChanges
.
Сказав, что, если бы вы переместили подписку в метод ngOnInit, вам нужно всего лишь удалить fixture.detectChanged
из функции beforeEach и переместить ее в свой тестовый пример после вашегоspyOn.