2017-02-22 11 views
1

を使用するコンポーネントのテスト:冗談 - 私は、次のcontextTypesを持っている子コンポーネントをレンダリングするコンポーネントをテストしてい反応し、ルータ

Component.contextTypes = {router: PropTypes.object.isRequired} 

私は冗談する完全に新しいですが、モカ/酵素Iから来るのこの問題に遭遇したことはありません。

私の最初のテストはこのようになります、と私は本当にただそれがどのように動作するかを確認するために、それをいじりだ:

it('should exist',() => { 
    wrapper = renderer.create(<Companies/>); 
    let tree = wrapper.toJSON(); 
    expect(tree).toMatchScreenshot(); 
}); 

私は、私は次のエラーを取得するテストを実行すると:

Failed context type: The context `router` is marked as required in `ChildComponent`, but its value is `undefined`. 

これには回避策がありますか、またはドキュメントの中に何か不足していますか?前もって感謝します!

SOLUTION:同じ問題に遭遇し、誰のために、私は)beforeEach(に次のように使用:

MyComponent.contextTypes = { 
     router: function() { 
      return { 
       transitionTo: jest.genMockFunction() 
      }; 
     } 
    }; 
+0

どのバージョンの反応ルータを使用していますか? – paqash

+0

@paqashバージョン2.4.1 – Jake

答えて

2

私はいくつかのコンポーネントで<Link>を使用していた場合、同様の問題があったが、同じエラーに直面しました上記のように。 私の場合は、反応ルータ4.1.1を使用していましたが、上記の解決策は機能しませんでした。

私はオブジェクトと機能をコンテキストに追加しましたが、私は誰かが私にこれに対してより良い解決策を与えてくれることを願っています。

describe('SomeComponent',()=>{ 

    it('renders component',()=>{ 
    const wrapper = mount(
     <SomeComponent />, 
     { 
     context: { 
      router: { 
      history: { 
       push:()=>{}, 
       replace:()=>{}, 
       createHref:()=>{}, 
      } 
      } 
     }, 
     childContextTypes: { 
      router: PropTypes.object.isRequired, 
     } 
     } 
    ) 
    expect(wrapper.text()).toContain('some component text') 
    }) 

}) 

私は酵素をmountに使用しています。

関連する問題