2016-12-14 11 views
4

mapDispatchToPropsがディスパッチ関数でラップされたアクションクリエータを正しく返すように、単体テストを書くべきですか?ReduxでmapDispatchToPropsの単体テストをどのように行う必要がありますか?

私は現在、テストのためにモカと酵素を使用しています。

ここは私のコンテナコンポーネントです。

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) 

答えて

5

私は実際にあなたないはそれをやろうということを示唆しています。珍しい方法でdispatchを使用する必要性が非常に明確な場合を除き、connectがサポートするオブジェクト略語構文を使用することをお勧めします。 2番目の引数としてアクション作成者でいっぱいのオブジェクトをconnectに渡すと、自動的にオブジェクトがbindActionCreatorsで実行されます。したがって、この場合はexport default connect(mapState, LayerActions)(App)になります。

あなたはその呼び出しの結果をactionsという名前の小道具として返していることがわかります。私は自分でやっていましたが、最終的には、私のコンポーネントのいくつかがReduxに接続していることを知る必要があったので(つまり、this.props.someActionCreator()の代わりにthis.props.actions.someActionCreator()を呼び出す必要がありました)

私はIdiomatic Redux: Why use action creators?という記事を書いて、これらのトピックのいくつかを詳しく説明しました。

+0

ワンダフルです。本当にありがとう。 2番目の引数としてオブジェクトリテラルのアクションを渡すと、Connectによって注入された注入されたアクションをサイドバーの子コンポーネントに渡すにはどうすればよいですか? – therewillbecode

+0

一般的には、アクション関連の小道具をまとめて渡す必要があります。それは明示的( 'const {firstAction} = props')であるかもしれませんし、catch-all(' const {layers、... allOtherProps} = props')のより多くのものでもあります。いずれにしても、それらを抽出してサイドバーにそれらの小道具をレンダリングします。 – markerikson

関連する問題