2016-04-03 8 views
0

から店舗に依存コンポーネント...テスト私は文脈から受け継がReduxのストアに依存しているコンポーネントのテストを設定する手間を抱えている状況

私のアプリはその子を与えるルートコンポーネントを持っています私は店舗によって異なりコンポーネントは(文脈から受け継がれ)ている

import ApplicationStore from './app-store.js' 

class Root extends Component { 
    getChildContext() { 
     return { store: ApplicationStore } 
    } 
    render(){...} 
} 

Root.childContextTypes = { 
    store: PropTypes.object, 
}; 

:コンテキストとしてReduxのストアが

class List extends Component { 
    render(){ 
    const items = this.context.store.getState(); 

    return items.map((_, i) => (
     <div key={i}>{_.name}</div> 
    )); 
    } 
} 

List.contextTypes = { 
    store: PropTypes.object, 
}; 

だから私の質問は:どのように私は「注入」するために、ST私のコンポーネントのコンテキストにオブジェクトですか? unmock(./app-store.js)する必要がありますか?また、どのようにして店をいくつかの備品で事前に充填することができますか?

ありがとうございます!

答えて

0

私はこれがあなたの質問に答えていないが、私は文脈上React.jsのドキュメントにあなたを指すように希望を知っている:

ほとんどのアプリケーションでは、コンテキストを使用する必要はありません。特にReactを使い始めるのであれば、コンテキストを使用したくないと思われます。コンテキストを使用すると、コードの理解が難しくなります。なぜなら、データフローがあまり明確でないためです。グローバル変数を使用してアプリケーションに状態を渡すのと同様です。

コンポーネントを通して、あなたのモデルデータを渡すためにコンテキストを使用しないでください。木を明示的にスレッディングすることは、はるかに理解しやすくなります。コンテキストを使用すると、レンダリングされる場所によって動作が異なるため、コンポーネントの結合や再利用が少なくなります。

あなたのテストでは、あなたは、単にあなたの嘲笑やスタブストアを注入することができますので、あなたの問題が既に解決され、あなたの子コンポーネントにお店(またはそれのだけでも必要な部品)を渡すために小道具を使用している場合。

+0

ありがとう、@ニコール。私はそれを読んで、アプリケーションを書いてコンテキストをコンテキストとして渡すことにしましたが、私はそれをずっと考えていませんでした。 –

+1

React with Reduxを使用している場合は、公式の「React Redux」ライブラリを使用してコンポーネントをストアに接続する必要があります(https://github.com/reactjs/react-redux)。ストアの購読を管理します。そこからは、ちょうど小道具を取り込む "普通"のコンポーネントと、あなたが書いた 'mapStateToProps'関数をテストすることに集中でき、ストアを含むものをテストすることを心配する必要はありません。 [使用上の使用法](http://redux.js.org/docs/basics/UsageWithReact.html)および[Writing Tests](http://redux.js.org/docs/recipes/WritingTests.html)を参照してください。 docsページ。ありがとう、@ markerikson。 – markerikson

+0

私は根元のコンポーネントをreact-reduxから ''でラップしました。 –

関連する問題