2017-05-24 10 views
6

リアクトルルータv4に切り替えられたIveは、いくつかのテストを再実装する必要があります。 I以下のシナリオがあります方法は、 回呼び出されているかどうかをチェックsetProps リアクタールータ4と酵素

    • は酵素による小道具を変更(methodAが呼び出されたかどうかをチェック)成分
    • を実装方法をラッパー

      これは古いルータではかなり簡単でしたが、新しいルータでは非常に困難です。

      コンポーネントは、コンポーネントのレンダリングに適切なcontxtを提供する必要があることを意味します。ザッツなぜMemoryRouter作成されています:私たちは、酵素ライブラリー(http://airbnb.io/enzyme/docs/api/ReactWrapper/setProps.html)でsetProps方法を見てみる場合 しかし..:私たちは、コンポーネント(https://reacttraining.com/react-router/web/guides/testing詳細を):レンダリングすることができることに

      const comp = mount(
           <MemoryRouter> 
           <Comp {...someProps} /> 
           </MemoryRouter> 
          ); 
      //here comes assertion about spy getting called 
      

      感謝を

      ルートコンポーネントの小道具を設定して再レンダリングするメソッド。それは私がcomp.setProps({.. newPropsを})を呼び出す場合、それが実際にルートの小道具(MemoryRouter)を変更するが、地獄のように吸う私の成分の小道具を、変更doesntのこと。意味

      このような場合の洞察はありますか?

  • 答えて

    5

    MemoryRouterの周りにラッパーを記述し、すべての小道具をテストする必要があるノードに渡すことができます。

    const CompWrappedWithMemoryRouter = (props) => { 
        return (
         <MemoryRouter> 
          <Comp {...props /> 
         </MemoryRouter> 
        ) 
    } 
    

    を動作するはずそしてもちろん

    const comp = mount(
         <CompWrappedWithMemoryRouter {...someProps} /> 
        ); 
    

    comp.setPropsをそれを使用します

    関連する問題