Угловые юнит-тесты, наблюдаемые с помощью метода подписки, не запускающего - PullRequest
0 голосов
/ 12 мая 2018

Как я могу заставить эту подписку срабатывать в моих модульных тестах.

.close.then((resolve: IModelInstance): void => {
    resolve.status$.subscribe((status: Status): void => {
      this._checkStatus(status);
    });
  });

this._checkStatus (status) имеет некоторую логику, которая проверяет значение для запуска вывода компонента.

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

......as Spy).and.returnValue({
  close: new Promise((resolve: Function): void => {
    closeResolve = resolve;
  })
});

Данные для передачи в closeResolve следующие:

        beforeEach(async(() => {

          closeResponseSubject = new Subject<Status>();

          closeResponse = {} as Partial<Instance> as Instance;

          closeResponse.status$ = closeResponseSubject.asObservable();

          closeResponseSubject.next(Status.CREATED);

          closeResolve(closeResponse);
        }));

При использовании этого метода в компоненте тесты переходят в «тогда», а не в «подписку».Я посмотрел на разные вопросы и ответы здесь, но пока не повезло.Я просто не понимаю, почему тест не пойдет на подписку.Я не знаю

1 Ответ

0 голосов
/ 12 мая 2018

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

.close.then((resolve: IModelInstance): void => {
    resolve.status$.subscribe((status: Status): void => {
      this._checkStatus(status);
    });
  });

Я использовал эту реализацию вместо:

.close.then((resolve: IModelInstance): void => {
    this._checkStatus(resolve.status);
  });

Затем в модульном тесте у меня есть следующий макет данных - макет обещания остается прежним:

closeResponse = {
  status: Status.CREATED
} as Partial<Instance> as Instance;

...............................................

beforeEach(async(() => {
  closeResolve(closeResponse);
}));

При этом мне не нужно подписываться на статус $, чтобы получить значение модели статуса. Я просто указываю на другой статус собственности, который также имеет значение, которое меня интересует.

Как и @Antoniossss, предложил: «Вся идея в том, чтобы написать тестируемый код, который можно протестировать с помощью простых тестов».

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