代码之家  ›  专栏  ›  技术社区  ›  Alejandro

如何测试萨加斯的多个考生?

  •  0
  • Alejandro  · 技术社区  · 8 年前

    我有下面的故事听不同类型的 action :

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

    从本质上讲,当这个传奇收到某个动作时,它有多种行为。

    如果它收到 FOO 作为操作类型,它将调用 listener 功能等。

    目前,我很难仅用这三行来开玩笑地编写测试覆盖率。

    我以为写点东西和这个一起可以用,但是运气不好:

    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)
      })
    })
    

    我错过了什么?

    1 回复  |  直到 8 年前
        1
  •  1
  •   vahissan    8 年前

    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)
      })
    })