Испытание мрамора RXJS: выполнить действие на определенном этапе - PullRequest
0 голосов
/ 21 февраля 2019

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

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 (), но это не надежно .. где я могу запустить это, чтобы работать?Спасибо

...