Вам необходимо разделить тестирование сервиса и компонента. Модульное тестирование должно быть максимально изолированным.
Вместо того, чтобы проверять, работает ли служба в компоненте, вы должны использовать фиктивные данные, которые вы можете передать таким образом, и тестировать только функции компонента:
it('should test something for the component', () => {
component.directives = mockData;
// run a function that depends on the data and expect a return result
})
с другой стороны, вам нужно протестировать сервис, и это асинхронный вызов c, который вы должны сделать в вашем сервисе .spe c .ts файл:
it('should test something in the service', (done) => {
this.directive$.subscribe(data => {
expect(data) ... something
done();
})
})
note что мы передаем в функцию обратного вызова параметр done (указывает на то, что тестирование asyn c завершено), иначе тест завершится неудачно с ошибкой тайм-аута.
Я должен предупредить вас, что asyn c testing может быть сложным: вам может потребоваться передать (пропустить (1)) перед вашей подпиской, если вы ожидаете, что первый излучатель всегда будет нулевым.
Существуют другие методы тестирования наблюдаемых, такие как тестирование мрамора - но я лично еще не особо в это разбирался.