Я создал настраиваемую наблюдаемую интервал, которую можно приостановить:
export function pausableInterval(
duration,
pauser$: Observable<boolean>,
scheduler?: SchedulerLike
): Observable<number> {
let iteration = 0;
const interval$ = interval(duration, scheduler);
const _pauser$ = pauser$.pipe(map(pause => (pause ? NEVER : interval$)));
return _pauser$.pipe(
switchMap(val => val),
map(() => iteration++)
);
}
Я пытаюсь протестировать его с помощью мрамора rxjs, но я не знаю, как приостановить тогда возобновить это во время теста, так как я не знаю, когда и как сменить мою pause$
тему на всех этапах теста, выполняемых планировщиком.
Рабочий тест (вообще без паузы), простой тест):
it(
'should complete without any pause',
marbles(m => {
const pause$ = new BehaviorSubject(false);
const expected = m.cold('---0--(1|)');
const destination = pausableInterval(m.time('---|'), pause$, m.scheduler).pipe(
take(2),
map(v => v.toString())
);
m.expect(destination).toBeObservable(expected);
})
);
Я попытался с помощью trigerring pause$.next(true/false)
с setTimeout (), но это не надежно .. где я могу запустить это, чтобы работать?Спасибо