Я собрал простой Stackblitz , чтобы показать вам, как я буду подходить к тестированию этого простого метода компонента, который вы описываете.
Вот спецификация этого Stackblitz:
it(`works with "of" 'cuz I want it to`, () => {
spyOn(someService, 'methodReturningObservable').and.returnValue(of(10));
component.somethingOrOther();
expect(component.testMe).toBe(10);
});
Некоторые из изменений, которые я внес в ваш код:
- Мне пришлось внести небольшие изменения в ваш метод компонента, чтобы он работал.Подробности в Stackblitz.
- Функция
cold()
взята из библиотеки тестирования мрамора, но это слишком много для такой простой функции.rxjs
имеет метод создания of
Observable, который может создать холодную синхронную наблюдаемую, на которую можно подписаться (но более подробно, если вы действительно хотите проверить это таким образом). - Поскольку в приведенной выше спецификации используетсясинхронная наблюдаемая, нет необходимости в
fakeAsync()
, так как он будет завершен немедленно. - Тестируемый метод нужно было явно вызывать для тестирования, сделанный выше со строкой
component.somethingOrOther()
.
Как вы можете видеть в Stackblitz, этот тест проходит очень хорошо.
Теперь, если вы хотите использовать тестирование мрамора даже для этого простого случая, я настроил другую спецификацию в Stackblitz длятот.Это выглядит следующим образом:
it(`works with "cold" 'cuz I want it to`, () => {
spyOn(someService, 'methodReturningObservable').and.returnValue(cold('a', { a: 10 }));
component.somethingOrOther();
getTestScheduler().flush(); // flush the observables
expect(component.testMe).toBe(10);
});
- Обратите внимание на тот факт, что компонентную функцию нужно было вызывать
- Также необходимо выполнить сброс getTestScheduler.
Оба теста сейчас проходят в Stackblitz.
Официальные документы для тестирования мрамора в Angular: здесь .
Надеюсь, это поможет.