Угловой неглубокий юнит тест с подпиской - PullRequest
0 голосов
/ 28 октября 2019

У меня межкомпонентная связь осуществляется через службу с подписчиком RxJS.

Компонент, который подписывается на это, настроен следующим образом:

export class MyComponent implements OnInit, OnDestroy {
  constructor(
    private myService: myService,
    private datePipe: DatePipe
  ) {}

  ngOnInit(): void {
    this.mySubscription = this.myservice
      .getSubject()
      .subscribe(() => {
          //DO..SOMEYHING
          })
   }

 }

Мы используем мелкие для тестирования, и myservice'sследующее событие подписки вызывается другим компонентом. Как мы можем протестировать приведенный выше блок кода, так как мы тестируем сервис внутри теста.

  beforeEach(async () => {
    shallow = new Shallow(MyComponent, MyModule)
      .mock(MyService, {

        getCount: () => of(25)
      })
  });

Мы не можем отправить в тест myservice.setSubject, который вызвал бы запуск кода в разделе ngInit.

1 Ответ

0 голосов
/ 29 октября 2019

Я бы попросил вас опубликовать сервисный код, но я попытаюсь угадать, что использование Субъекта не является самым рекомендуемым (вероятно, у вас есть свои причины).

Я бы хотелиметь сервис, похожий на этот:

export class MyService {
    private subject = new Subject<number>();

    updateCount(n: number) {
        this.subject.next(n);
    }

    getCount(): Observable<number> {
        return this.subject.asObservable();
    }
}

На стороне компонента, в методе ngOnInit, я бы не получил весь предмет, но субъект как наблюдаемый, и подписка будет выглядеть так:

this.myservice
      .getCount()
      .subscribe(() => {
          //DO..SOMEYHING
          })

Вы упомянули, что следующая подписка вызывается другим компонентом . Теперь вы можете использовать метод updateCount в сервисе, централизуя логику в сервисе, и вы можете легко над ним издеваться.

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...