接続コンポーネントとしてエクスポートされているコンポーネントのメソッドをテストできるようにするため、そのコンポーネントのインスタンスに到達する必要があります。React testing:接続した(redux)コンポーネントのインスタンスに到達するにはどうすればいいですか?
export default connect(mapStateToProps, mapDispatchToProps)(MyComponent);
このインスタンスには問題があります。
接続コンポーネントとしてエクスポートされているコンポーネントのメソッドをテストできるようにするため、そのコンポーネントのインスタンスに到達する必要があります。React testing:接続した(redux)コンポーネントのインスタンスに到達するにはどうすればいいですか?
export default connect(mapStateToProps, mapDispatchToProps)(MyComponent);
このインスタンスには問題があります。
私が取るアプローチは、MyComponent
,mapStateToProps
、およびmapDispatchToProps
のユニットテストを作成することです。 MyComponent
のユニットテストでは、あなたが探していることを達成することができます。
Reduxによる統合テストは、将来のアップグレードが機能しているかどうかを判断するのに役立ちますが、コンポーネントのメソッドが期待どおりに機能しているかどうかを判断するためにReduxでアプリケーションを完全に起動する必要はありません。
最も単純なオプションは、接続されていないコンポーネントをエクスポートし、ストアから取得する小道具を渡すテストです(基本的には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
を使用して)このようなテストを構築することができます。
Marioに感謝しますが、これはコンポーネントのレンダリングをテストしており、コンポーネントのインスタンスには到達していません。 私は次のようなものをテストする必要があります: const componentInstance = <--- const methodReturnValue = componentInstance.method(); expect(methodReturnValue).to.be.true; – Asso
mhmあなたが手作業でそのメソッドを実行できるコンポーネントを用意したいのであれば、それが '酵素'でマウントできるかもしれませんが、それが良い習慣と考えられるかどうかは分かりません –
未接続コンポーネントもエクスポートしますか? http://redux.js.org/docs/recipes/WritingTests.html#connected-components – azium
@aziumが唯一の方法だと思う、アジウムに感謝します。 – Asso