首页 > 解决方案 > 主题的TestScheduler

问题描述

我想.next谈一个简单的话题submitTask$

我的管道是这样的:

export const submitTask$ = new Subject();

function epic() {
  return submitTask$.pipe(
    map(taskId => {
        console.log('here');
        return Boolean(taskId)
    })
  )
}

我正在尝试使用 TestScheduler 来测试它,但无法弄清楚如何。我试过这个:

const testScheduler = new TestScheduler((actual, expected) => {
  expect(actual).toStrictEqual(expected);
});

testScheduler.run(({ hot, expectObservable }) => {

const actions$ = hot('-', [() => submitTask$.next(task.id)]);

const output$ = epic();

expectObservable(output$).toBe('0', [true]);

但是它不起作用,我从来没有看到console.log('here')

标签: rxjsrxjs-test-scheduler

解决方案


在我看来,你没有订阅actions$。另外,我不确定[() => submitTask$.next(task.id)]会做任何事情。

你可以试试这个:


testScheduler.run(({ /* ... */ }) => {
  const s = new Subject();

  const src = hot('    --a', { a: 1 /* task.id */ });
  const expectedSrc = '--1';

  const epicObs = cold('-s').pipe(mergeMapTo(epic())); // Subscribe to the subject, before the value is emitted
  const expectedEpic = '--v';
  const epicValues = { v: true };

  expectObservable(src.pipe(tap(id => s.next(id)))).toBe(expectedSrc);
  expectObservable(epicObs).toBe(expectedEpic, epicValues);
});

推荐阅读