假设我有一个如下所示的redux连接反应组件:
class App extends Component {
renderErrorMessage() {
const { errorMessage } = this.props;
if(!errorMessage) {
return;
}
// render error message
}
render() {
return (
<div>
<Menu location={this.props.location.pathname}/>
<div className="jumbotron">
{ this.renderErrorMessage() }
{ this.props.children }
</div>
</div>
);
}
};
function mapStateToProps(state) {
return {
errorMessage: state.get('errorMessage')
};
};
App.propTypes = {
errorMessage: PropTypes.string,
children: PropTypes.node,
resetErrorMessage: PropTypes.func.isRequired
};
export default connect(mapStateToProps, {
resetErrorMessage
})(App);
我的失败行动如下:
export function fetchResultsFailure(error) {
return {
type: FETCH_RESULTS_FAILURE,
error
}
}
我的减速机看起来像这样:
function errorMessage(state = null, action) {
const { type, error } = action;
if(type === ActionTypes.RESET_ERROR_MESSAGE) {
return null;
} else if (error) {
return action.error;
}
return state;
};
我正在使用redux-saga,故障情况可能会这样调用:
function* fetchEntity(entity, apiFn) {
yield put(entity.request());
const { response, error } = yield call(apiFn);
if(response) {
yield put(entity.success(response));
} else {
console.log(error);
yield put(entity.failure(error));
}
};
我该如何测试?我想测试这个结束,并返回错误消息
答案 0 :(得分:0)
首先,您必须单元测试各个组件。例如。确保如果您将组件传递给错误道具,则会渲染它。
其次,端到端测试是关于测试整个应用。因此,为了测试错误在端到端测试中是否有效,您需要找出导致该错误的原因(例如数据库已关闭)并复制该错误(拔掉数据库服务器:))。
您可以存根/模拟各种接口(例如拦截强制错误的网络请求)并加快测试速度。
对于所有这些,您可能希望使用类似selenium的内容进行自动化。
最后,我的观点是,您不需要对不符合代码的内容进行单元测试。也就是说,您不需要测试Redux的connect
是否按照它所说的那样进行测试,您不需要测试您的组件是否导入了正确的模块等。可能听起来很明显但我认为一旦你不再考虑多模块单元测试,你的测试就会越容易。