我有以下的传奇,监听不同类型的action

export default function *() {
  yield takeEvery('FOO', listener)
  yield takeEvery('BAR', listener2)
  yield takeEvery('HELLO_WORLD', listener3)
}


本质上,此传奇在收到某些动作时具有多种行为。

如果将FOO作为操作类型,它将调用listener函数,依此类推。

目前,我很难仅在这3行中就开玩笑地撰写测试报道。

我以为可以写些东西,但是运气不好:

describe('for action type that has "FOO"', () => {
  const actionPayload = {
    type: 'FOO',
  }
  const gen = saga({ type: actionPayload })

  it('listens to "FOO" and yield action', () => {
    const actual = gen.next()
    const expected = takeEvery('FOO', listener)
    expect(actual.value).toEqual(expected)
  })
})


我想念什么?

最佳答案

takeEvery实际上是一个fork。因此,您应该像这样进行测试:

describe('for action type that has "SMS_API_REQUEST"', () => {
  const actionPayload = {
    type: 'FOO',
  }
  const gen = saga({ type: actionPayload })

  it('listens to "FOO" and yield action', () => {
    const actual = gen.next()
    const expected = fork(takeEvery, 'FOO', listener)
    expect(actual.value).toEqual(expected)
  })
})

09-30 13:31
查看更多