【发布时间】:2019-05-03 20:20:04
【问题描述】:
我正在为连接到 Redux 存储的 React 组件编写测试。我要测试的是,当我在 store 上 dispatch reset 时,组件状态恢复为默认值。
思路如下:当RESET被派发时,组件接收到truthy reset属性,并在componentWillReceiveProps中将组件状态设置为默认值。它可以工作,但它没有通过测试。如果我连接调试器并运行测试,我可以看到它在componentWillReceiveProps 中设置状态,但是当我期望timeLeft 状态为 10000 时,它仍然是上面设置的 1111。我错过了什么?这可能不是一个完美的测试方式,但我对 React/Redux 组件测试有点陌生,很高兴听到改进我测试方式的最佳实践。
减速机:
const resetReducer = (state, action) => (action.type === 'RESET');
组件:
class Timer extends React.Component {
componentWillReceiveProps(next) {
if (next.reset) {
this.setState({
timeLeft: 10000,
});
}
}
function mapStateToProps(state) {
return {
reset: state.reset
}
}
export default connect(mapStateToProps)(Timer);
测试:
it('Reset', () => {
// use mount because I need componentWillReceiveProps to run
const wrapper = mount(<Timer/>);
wrapper.setState({
timeLeft: 1111
});
store.dispatch({ type: 'RESET' });
wrapper.update();
expect(wrapper.state('timeLeft)).toBe(10000);
});
【问题讨论】:
标签: reactjs unit-testing redux react-redux enzyme