Jest在Redux中间件中测试循环'await'

时间:2017-12-30 20:27:14

标签: unit-testing redux middleware jest

我需要测试(Jest)一个Redux中间件,它检索并发送一系列以前保存的动作。它使用'await'运算符,以便按顺序完成操作。

这在运行中有效,但在测试中,只从序列中的第一个动作从已保存的数组中弹出并调度。

我尝试过在Redux文档中找到的模式的多种变体,包括使用redux-mock-store,没有任何乐趣。我是Jest的新手(以及一般的React / Redux单元测试),这也是我在中间件上的第一次破解。我觉得它的循环结构阻止了测试的迭代,但是我无法解决这个问题。

中间件的内容看起来像这样:

 //there are 3 saved actions in the test
 const actions = getState().actions
 while (actions.length > 0) {
     const action = actions.pop()
     await Promise.resolve(next(action))
           .then(()=>{
              console.log('this hits 3 times')
           })
 }

我最初尝试的天真尝试是这样的:

it(`dispatches all saved actions on request`, () => {
    _values['state'].rewind = {
        actions: {
            abcdef: [
            { type: 'TEST', payload: { value: 'rewind value 1' }},
            { type: 'TEST', payload: { value: 'rewind value 2' }},
            { type: 'TEST', payload: { value: 'rewind value 3' }}]
    }
}
const action = createTriggerAction('abcdef')
const { next, store, invoke } = create()   // spy/mocks as in Redux Docs
invoke(action)
expect(next).toHaveBeenCalledTimes(3);     // fails, called only once

})

我混淆了'调用'一个异步函数和'等待'模拟'下一个'等但没有帮助。

关于如何做到这一点的任何指示都将非常感激!

0 个答案:

没有答案