Испытание мрамора RXJS: выполнить действие на определенном этапе

Я создал собственный наблюдаемый интервал, который можно приостановить:

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);
    })
);

Я попробовал тригерринг pause$.next(true/false) с setTimeout(), но это не надежно.. где я могу активировать это? Спасибо

0 ответов

Другие вопросы по тегам