2017-08-08 6 views
0

接続コンポーネントとしてエクスポートされているコンポーネントのメソッドをテストできるようにするため、そのコンポーネントのインスタンスに到達する必要があります。React testing:接続した(redux)コンポーネントのインスタンスに到達するにはどうすればいいですか?

export default connect(mapStateToProps, mapDispatchToProps)(MyComponent); 

このインスタンスには問題があります。

+0

未接続コンポーネントもエクスポートしますか? http://redux.js.org/docs/recipes/WritingTests.html#connected-components – azium

+0

@aziumが唯一の方法だと思う、アジウムに感謝します。 – Asso

答えて

0

私が取るアプローチは、MyComponent,mapStateToProps、およびmapDispatchToPropsのユニットテストを作成することです。 MyComponentのユニットテストでは、あなたが探していることを達成することができます。

Reduxによる統合テストは、将来のアップグレードが機能しているかどうかを判断するのに役立ちますが、コンポーネントのメソッドが期待どおりに機能しているかどうかを判断するためにReduxでアプリケーションを完全に起動する必要はありません。

0

最も単純なオプションは、接続されていないコンポーネントをエクスポートし、ストアから取得する小道具を渡すテストです(基本的にはmapStateToPropsを迂回します)。

もう1つの方法は、接続されたコンポーネントのテストを作成することです。この場合、Providerにラップし、初期状態にして、ストア自体から情報を取得する必要があります。 jestであることを行うヘルパーの一例は次のようになります。

import React from 'react' 
import renderer from 'react-test-renderer' 
import { Provider } from 'react-redux' 

import configureMockStore from 'redux-mock-store' 

const fullRender = (jsx, state = {}) => { 
    const store = configureMockStore([](state) 
    const component = renderer.create(
    <Provider store={store}> 
     {jsx} 
    </Provider> 
) 

    return { store, component } 
} 
export default fullRender 

これは(サンクなどなど)の状態でミドルウェアを含むように、より現実的な設定を使用するように拡張またはも考慮にルーティングを取ることができます。

import React from 'react' 
import { fullRender } from '../../test' 
import Header from './Header' 

describe('components',() => { 
    let state = { a: { b: 3 } } 
    describe('Header',() => { 
    it('renders correctly',() => { 
     const { component } = fullRender(<Header />, state) 
     expect(component.toJSON()).toMatchSnapshot() 
    }) 
    }) 
}) 

あなたが備品としてあなたのテストの「スナップショット」を格納し、同様にあなたのテストにそれを養うことができます。そして、あなたは(再びjestを使用して)このようなテストを構築することができます。

+0

Marioに感謝しますが、これはコンポーネントのレンダリングをテストしており、コンポーネントのインスタンスには到達していません。 私は次のようなものをテストする必要があります: const componentInstance = <--- const methodReturnValue = componentInstance.method(); expect(methodReturnValue).to.be.true; – Asso

+0

mhmあなたが手作業でそのメソッドを実行できるコンポーネントを用意したいのであれば、それが '酵素'でマウントできるかもしれませんが、それが良い習慣と考えられるかどうかは分かりません –

関連する問題