RXJS大理石测试:在特定步骤执行动作

时间:2019-02-21 16:07:56

标签: angular typescript rxjs karma-jasmine rxjs-marbles

我创建了一个可暂停的自定义间隔观察值:

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 marble对它进行测试,但是我不知道如何在测试期间先暂停然后恢复,因为我不知道何时以及如何在计划程序运行的所有测试步骤中更改我的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);
    })
);

我尝试通过setTimeout()触发pause$.next(true/false),但是不可靠。.在哪里触发它起作用?谢谢

0 个答案:

没有答案