componentDidMount()
ハンドラでreduxアクションをディスパッチする反応コンポーネントのスナップショットテストを行いたいとします。アクションは、Reduxのconnect()
を介してコンポーネントに与えられます。Reduxのアクションでテストコンポーネントをスナップショット接続するにはどうすればよいですか?
私はどのように行動を模擬すべきですか?
今、アクションはコンポーネントにインポートされます(下記のNewsfeed.jsを参照)。だから私はテストの模擬動作のためにそれを取り替えるのですか?
私は非同期アクションのためにredux-thunkを使用していますが、それはあまり重要ではありません。
APP /コンポーネント/ Newsfeed.js
import React, { Component } from 'react';
import { connect } from 'react-redux';
// An action that makes an async request to get data
import { loadNewsfeedStories } from '../actions/Newsfeed';
class Newsfeed extends Component {
componentDidMount(){
this.props.loadNewsfeedStories();
}
...
}
export default connect(state => ({
stories: state.newsfeed.stories
}),
{
loadNewsfeedStories
})(Newsfeed)
APP /試験/ Newsfeed.test.js
import React from 'react';
import { Provider } from 'react-redux';
// This creates a mockStore using my reducers and a saved JSON state.
import { mockStore } from './MockState';
// The component to test
import Newsfeed from '../components/Newsfeed';
test('Newsfeed matches snapshot',() => {
const wrapper = mount(
<Provider store={mockStore}>
<Newsfeed />
</Provider>
);
expect(wrapper).toMatchSnapshot();
});
可能な解決策
接続されていないコンポーネントをエクスポートし、すべての小道具&モックアクションを手動で渡します。 mockStore &プロバイダを使用するのと比べて、余分なコーディングが多くなります。また、接続されたコンポーネントをテストすることもありません。
Nockのようなものを使用しますか? HTTPコールを傍受するように見えるので、ajaxリクエストは実際にはどこにも行きません。 https://github.com/mzabriskie/moxios