2017-08-22 22 views
0

酵素マウントを使用して反応成分を試験しています(これはライフサイクルの方法をテストしているためです)。酵素マウントを使用して反応した子成分と反応する成分を試験する

Invariant Violation: Could not find "store" in either the context or props of "Connect(Popup)". Either wrap the root component in a <Provider>, or explicitly pass "store" as a prop to "Connect(Popup)

どのように私はこれを回避することができます:私の問題は私の部品は私にエラーを与えているReduxの接続子コンポーネントを、持っているということでしょうか?
ありがとうございます!
Uri

答えて

0

エラーが発生したため、コンポーネントにストアを提供する必要があります。

小道具を通してそれを渡す次のいずれか

const wrapper = mount(<PopupContainer store={store} />) 

それとも<Provider>でラップを:今

const wrapper = mount(
    <Provider store={store}> 
     <PopupContainer /> 
    </Provider> 
) 

、あなたは冗談を使用していると干渉する包まれたコンポーネントをしたくない場合はあなたのテスト、あなたはそれを嘲笑することができます:

jest.mock('./Popup',() => 'Popup'); 
+0

私は子供をマウントせずにコンポーネントをマウントする方法を探しています..しかし、これはこれを解決する唯一の方法だと思いますか?店を嘲笑するかもしれない? –

+0

@UriKlarあなたはライフサイクルのフックをテストするために 'mount'を使っていると言ったので、子供たちはマウントされます。しかし、Popupコンポーネントを空白でモックすることができます。 –

+0

はい、モックポップアップは完璧なソリューションになります!答えを編集して、どうやってそれをやり遂げることができるかの例を含めることができますか?私はこれを見つけました:http://engineering.pivotal.io/post/stub-dont-shallow-render-your-child-components/、私はちょうどコンテナコンポーネントのレンダリングメソッドをスタブすることができます。しかし、あなたが簡単な方法を持っているなら、あなたがそれを共有すれば、私は感謝します! –

0

いいえ、あなたは店を模擬する必要はありません。ただ、包まれたコンポーネントを抽出:

const WrappedPopup = Popup.WrappedComponent; 

をそして嘲笑小道具や行動で、通常のコンポーネントと同じようにそれをテストします。

const wrapper = mount(<WrappedPopup connectPropA={...} actionB={...} />); 

包まれたコンポーネントは静的プロパティですconnectは、アクセスするためのラッパーコンポーネントに追加しました元のコンポーネント。

+0

私はPopupコンポーネントをテストしようとしていません。 Popupがその子の1つであるコンテナコンポーネントをテストしようとしています。 –

関連する問題