Как смоделировать более сложное поведение RxJs (в контексте NgRx)?
Учитывая простой компонент (SomeComponent):
export class SomeComponent implements OnInit {
foo$: Observable<any>;
bar$: Observable<any>;
constructor(private store: Store<State>) {}
ngOnInit() {
this.foo$ = this.store.pipe(select(getFooSelector));
this.bar$ = this.store.pipe(select(getBarSelector));
}
}
Я хотел бы смоделировать хранилище таким образомthat:
- На основе переданного селектора фиктивное хранилище возвращает другое значение.
- Шпион, какой аргумент (селектор) был передан оператору
select
.
Основываясь на переданном селекторе, фиктивное хранилище возвращает другое значение
Я бы видел это примерно так:
store.pipe = jest.fn(selectOperator => {
switch (selectOperator.arguments[0]) {
case getFooSelector:
return foo;
case getBarSelector:
return bar;
}
}
Шпион, какой аргумент (селектор) был передан select
operator.
Что-то в этом роде:
const spy = jest.spyOn(store, 'pipe');
expect(spy.mock.calls[0]).toHaveBeenCalledWith(select(getFooSelector));
expect(spy.mock.calls[1]).toHaveBeenCalledWith(select(getBarSelector));
Резюме
Я знаю, что оба эти примера являются псевдокодами, но я надеюсь, что они демонстрируют то, чего я пытаюсь достичь,Если мой подход полностью неверен, пожалуйста, прокомментируйте это.