我应该如何在Redux中测试mapDispatchToProps?

the*_*ode 6 unit-testing reactjs redux

应该如何编写单元测试以确保mapDispatchToProps正确返回包含在调度函数中的动作创建者?

我目前正在使用Mocha和Enzyme进行测试.

这是我的容器组件.

import { Component } from 'react'
import { connect } from 'react-redux'
import Sidebar from '/components/Sidebar'
import Map from '/components/Map'
import * as LayerActions from '../actions/index'

// Use named export for unconnected component (for tests)
export const App = ({layers, actions} ) => (
    <div>
     <Sidebar LayerActions={actions} />
     <Map /> 
    </div>
)

export const mapStateToProps = state => ({
  layers: state.layers
})

export const mapDispatchToProps = dispatch => ({
    actions: bindActionCreators(LayerActions, dispatch)
})

// Use default export for the connected component (for app)
export default connect(mapStateToProps, mapDispatchToProps)(App)
Run Code Online (Sandbox Code Playgroud)

mar*_*son 6

我实际上建议你不要试图这样做.除非您非常特别需要以dispatch不寻常的方式使用,否则我建议您只使用connect支持的对象速记语法.如果您将一个充满动作创建者的对象作为第二个参数传递给connect它,它将自动bindActionCreators为您运行该对象.所以,在这种情况下它会export default connect(mapState, LayerActions)(App).

我确实看到你将该调用的结果作为命名的道具返回actions.我开始做我自己,但最终切换远离它,因为它需要我的一些组件的"知道",他们连接到终极版(即不必调用this.props.actions.someActionCreator(),而不是this.props.someActionCreator()).

我写了一篇名为Idiomatic Redux的文章:为什么要使用动作创作者?它更详细地介绍了其中一些主题.