TestScheduler для предмета - PullRequest
       6

TestScheduler для предмета

0 голосов
/ 27 апреля 2020

Я пытаюсь вызвать .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')

1 Ответ

0 голосов
/ 28 апреля 2020

Мне кажется, что вы не подписываетесь 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);
});
...