酵素を使用して、モカとアサートを期待します。Reduxユニットテストでストアを更新するには?
私のユニットテストの目的は、一時停止し、mergePropsで一時停止していないときに正しい引数を使って呼び出されるディスパッチをチェックすることです。 私の店舗の状態を動的に変更する必要があります:paused: true
。私が試してみて、派遣で一時停止値を更新したが、私はそれだけでモックだと決して実際に減速機を通るので、これが正しいとは思わない瞬間
。
私はパッケージredux-mock-storeを使用しています。
どうすればよいですか?
describe('Play Container',() => {
const id = 'audio-player-1';
const store = configureMockStore()({
players: {
'audio-player-1': { paused: false }
}
});
let dispatchSpy;
let wrapper;
beforeEach(() => {
dispatchSpy = expect.spyOn(store, 'dispatch');
wrapper = shallow(
<PlayContainer className={attributes.className}>
{children}
</PlayContainer>,
{ context: { id } },
).shallow({ context: { store } });
});
it('onClick toggles play if paused',() => {
//Not Working
store.dispatch(updateOption('paused', true, id));
wrapper.simulate('click');
expect(dispatchSpy).toHaveBeenCalledWith(play(id));
});
it('onClick toggles pause if playing',() => {
wrapper.simulate('click');
expect(dispatchSpy).toHaveBeenCalledWith(pause(id));
});
});
容器:
const mapStateToProps = ({ players }, { id }) => ({
paused: players[id].paused
});
const mergeProps = (stateProps, { dispatch }, { id }) => ({
onClick:() => (stateProps.paused ? dispatch(play(id)) : dispatch(pause(id)))
});
export default connectWithId(mapStateToProps, null, mergeProps)(Play);
connectWithId:
//getContext() is from recompose library and just injects id into props
export const connectWithId = (...args) => compose(
getContext({ id: React.PropTypes.string }),
connect(...args),
);
アクション:
updateOption: (key, value, id) => ({
type: actionTypes.player.UPDATE_OPTION,
key,
value,
id,
}),
を報告します、あなたは、このリンクを見たことがありますか? http://redux.js.org/docs/recipes/WritingTests.html – denvaar
私は上記の文書を読むことをお勧めします。アクション、レデューサー、コンポーネントの3つの異なるものを別々にテストする必要があります。アクション(実際にアクションクリエイター)をテストするときは、ディスパッチされた実際のアクションが正しく形成されていることを確認したいだけです。減速機をテストするときは、すでに行っているように店舗を模擬し、何らかのアクションを送り、新しい状態が返ってくることを期待してください。コンポーネントをテストするときは、実際に動作をテストしたい(つまり、ここをクリックするとディスパッチが呼び出されます)、もちろんディスパッチを嘲笑します。 –