私はアプリケーションを[email protected]
に移行しています。enzyme
のmount
機能を使用しているテストを取得することに問題があります。反応ルータv4でマウントされたコンポーネントをテストする
withRouter
-wrapされたサブコンポーネントを持つコンポーネントをマウントするたびに問題が発生します。
class SomePage extends React.Component {
componentDidMount() {
this.props.getData();
}
render() {
return (
<div>
<ComponentWrappedInWithRouter />
</div>
);
}
}
const Component = (props) => (
<button onClick={() => this.props.history.push('/new-route') }>
Click to navigate
</button>
);
const ComponentWrappedInWithRouter = withRouter(Component);
は今、私はそれが取り付けられていた後にその小道具getData
を呼び出すSomePage
それをテストしたい:
は、ここで私がテストだよ何の簡素化状況の例です。愚かな例、私は知っているが、構造は十分でなければならない。
私はenzyme
さんmount
を使用してテストを書くたびに、私は次のエラーを取得する:
TypeError: Cannot read property 'route' of undefined
at Route.computeMatch (node_modules/react-router/Route.js:68:22)
at new Route (node_modules/react-router/Route.js:47:20)
今、私は私にはないコンポーネントのwithRouter
を呼び出そうとするのでこれが起こる理由はあると思います文脈上にrouter
があります。つまり、<BrowserRouter />
またはその兄弟の1つにラップされていません。
これは[email protected]
の問題ではありませんでしたが、現在のメジャーは完全な書き換えであったため、これらの問題が発生することを完全に理解しています。
どのように私はこれを修正することができますか?
そのアプローチの問題は、もはやあなたがテストしているコンポーネントの状態へのアクセスを持っていないということです。だから、それは作品のようなものですが、実際はそうではありません。また、それは間違って感じる! ^^ –
なぜですか? 'find'を使ってマウントするコンポーネントに潜入することができます。なぜなら'浅い 'ではなく' mount'を使っているからです。私はもちろん何かを見逃しているかもしれませんが、元の質問で何を意味するのかははっきりしません:) – CharlieBrown
私が 'mount(...)を使うとfind( 'SomePage')。state()'、私にエラーが表示されますルートコンポーネントの状態、つまりマウントされているコンポーネントにのみアクセスできます。そして、 'MemoryRouter'で物をラップすると、それがルートコンポーネントになります。 'Dive'と' find'の両方で 'SomePage'に入ることを試みて、それを再マウントしようとしました - それは動作させることができませんでした。 –