Пропустите операторы и напрямую протестируйте результат потока:
store
.pipe(select('selector'))
.subscribe(val => expect(val).toBe(theMockedValSentToTheSpy))
Чтобы объяснить дальше:
- создать макет вашего магазина
- создать макет вашей ценности
- вернуть это поддельное значение в вашем смоделированном магазине
- ожидаем, что ваша компонентная переменная вернет имитированное значение
Это дает:
const mockedValue = { id: 1 };
const storeSubjectMock = new BehaviorSubject(mockedValue);
const mockedStore = {
pipe: () => storeSubjectMock.asObservable(),
};
// { provide: Sotre, useValue: mockedStore }; in your testbed
it('should return an unaltered value', () => {
component.variableReferencingStore
.pipe(select('selector'))
.subscribe(val => expect(val).toBe(mockedValue))
});
Теперь хорошо то, что вы можете протестировать все операторы таким образом. Скажем, ваша переменная компонента
storeValue$ = this.store.pipe(
select('selector'),
map(value => ({ ...value, name: 'customName' }))
)
Тогда ваши тесты просто изменятся на
it('should return an altered value with a name property set to customName', () => {
component.variableReferencingStore
.pipe(select('selector'))
.subscribe(val => expect(val).toEqual({ ...mockedValue, name: 'customName'))
});