测试 redux thunk 异步操作给出未定义而不是承诺

Posted

技术标签:

【中文标题】测试 redux thunk 异步操作给出未定义而不是承诺【英文标题】:testing redux thunk async actions give undefined instead of promise 【发布时间】:2018-05-25 04:22:20 【问题描述】:

我有一个创建动作的函数

export function dispatchAction (type, payload) 
 return dispatch => 
  dispatch(type: type, payload: payload)
 

我正在为它写测试

import configureMockStore from 'redux-mock-store'
import thunk from 'redux-thunk'
import * as actions from './actions
const mockStore = configureMockStore([thunk])
const store = mockStore()

describe('dispatch action', () => 
 it('should return action based on type and payload', () => 
  const type = 'TEST'
  const payload = 'payload'
  return store.dispatch(actions.dispatchAction(type, payload)).then(() 
   => 
    expect(store.getActions())
     .toEqual(type, payload)
    )
   )
 )

但我收到Cannot read property 'then' of undefined 的错误。

【问题讨论】:

什么是mockStore。那个函数返回什么? 更新了新代码 【参考方案1】:

根据docs:

内部函数的任何返回值都可以作为 dispatch 本身的返回值。

您没有在dispatchAction 中返回任何内容,因此出现了错误消息。如果你想要一个Promise,那么你必须返回一个Promise

【讨论】:

以上是关于测试 redux thunk 异步操作给出未定义而不是承诺的主要内容,如果未能解决你的问题,请参考以下文章

Redux-thunk 异步操作:使用自定义中间件进行异步操作

如何修复'动作必须是普通对象。使用自定义中间件进行异步操作。

redux-thunk:错误:动作必须是普通对象。使用自定义中间件进行异步操作

Redux thunk 函数未执行

动作必须是普通对象。将自定义中间件用于测试库而不是应用程序上的异步操作

Redux Thunk + Axios “操作必须是普通对象。使用自定义中间件进行异步操作。”