【发布时间】:2020-05-13 05:07:34
【问题描述】:
假设我有一个经典的 redux 结构:动作、组件、容器、reducers。
我在这里使用一个弹出示例
对于行动,我会:
closePopup () {
return { type: this.actionTypes.CLOSE_POPUP };
}
close () {
return (dispatch) => {
dispatch(this.closePopup());
dispatch(otherAction());
}
}
组件:
...
<button onClick={this.props.onClose()} />
...
容器:
const mapDispatchToProps = (dispatch) => ({
onClose () {
dispatch(popupActions.close());
},
});
减速器:
case actionTypes.CLOSE_POPUP:
return {
...state,
isClosed: true,
};
所以这是一个经典的工作流程。我有一个按钮,它从容器调用一个方法,该方法从 action.js 调用 close() 方法,并调度一些方法,其中一个调度一个改变状态的动作。
我想测试 container.js 中的 onClose 方法是否按照我的预期改变了状态。
例如,它应该是这样的:
describe('close', () => {
it('should change state', () => {
// expect(container.onClose()) to change state to { isClosed: true }
})
})
我怎样才能做到这一点? 这是使用 redux 进行测试的常见模式吗?因为我似乎找不到例子。
【问题讨论】:
-
不要测试 javascript,也不要测试第三方代码。 测试你的代码。单元是任何软件中最小的可测试部分。单独测试你的 reducer 以断言它们正确更新状态。单独测试您的 UI/props 以断言单击按钮时会调用传递的回调。一旦你开发了一套单元测试,你就可以在经过验证的代码的基础上进行构建,然后转向你所要求的,这更像是一个集成测试,而不是你真正想要在单元测试中做的事情。不过,请查看 react-testing-library,您可能会发现它的测试理念很有用。
标签: reactjs unit-testing redux jestjs