为什么我的减速器仍然在我的测试用例中设置无效输入的状态?
Why is my reducer still setting the state with invalid input in my test case?
我有一个只用数值设置 redux 状态的 reducer,但是,当我尝试用错误的输入测试它时,reducer 似乎仍然将状态更改为错误的输入。当我给它非数字输入时,为什么我的 reducer 仍在更新状态?
我的动作是这样的:
setCount: (count: number) => createAction(ActionTypes.SET_COUNT, {count})
这是我的reducer的相关代码:
case ActionTypes.SET_COUNT: {
draft.count = action.payload.count;
break;
}
这是我的单元测试:
describe(`(Action) ${ActionTypes.SET_COUNT}`, () => {
const unsuccessfulAction = Actions.setCount("bad input");
it("Should not update the state for the count when input is not a number", () => {
const state = myReducer(undefined, unsuccessfulAction);
expect(state.count).toBe(null);
});
});
当我 运行 我的测试用例时,收到的结果是“错误输入”,预期结果为空。
根据您问题的信息:
I have a reducer that sets the redux state with only numerical values
case ActionTypes.SET_COUNT: {
draft.count = action.payload.count;
break;
}
这里没有逻辑支持它设置状态“只有数值”。您显示的代码不加选择地将有效负载的 'count' 属性 中的任何内容设置为您所在州的 'count' 属性。
如果你真的想限制为数值,你需要在reducer中实际包含代码,当action.payload.count
是数字
时,只改变draft.count
例如
case ActionTypes.SET_COUNT: {
if (isNumeric(action.payload.count)) {
draft.count = action.payload.count;
}
break;
}
您可以找到 isNumeric
的合适实现。
我有一个只用数值设置 redux 状态的 reducer,但是,当我尝试用错误的输入测试它时,reducer 似乎仍然将状态更改为错误的输入。当我给它非数字输入时,为什么我的 reducer 仍在更新状态?
我的动作是这样的:
setCount: (count: number) => createAction(ActionTypes.SET_COUNT, {count})
这是我的reducer的相关代码:
case ActionTypes.SET_COUNT: {
draft.count = action.payload.count;
break;
}
这是我的单元测试:
describe(`(Action) ${ActionTypes.SET_COUNT}`, () => {
const unsuccessfulAction = Actions.setCount("bad input");
it("Should not update the state for the count when input is not a number", () => {
const state = myReducer(undefined, unsuccessfulAction);
expect(state.count).toBe(null);
});
});
当我 运行 我的测试用例时,收到的结果是“错误输入”,预期结果为空。
根据您问题的信息:
I have a reducer that sets the redux state with only numerical values
case ActionTypes.SET_COUNT: {
draft.count = action.payload.count;
break;
}
这里没有逻辑支持它设置状态“只有数值”。您显示的代码不加选择地将有效负载的 'count' 属性 中的任何内容设置为您所在州的 'count' 属性。
如果你真的想限制为数值,你需要在reducer中实际包含代码,当action.payload.count
是数字
draft.count
例如
case ActionTypes.SET_COUNT: {
if (isNumeric(action.payload.count)) {
draft.count = action.payload.count;
}
break;
}
您可以找到 isNumeric
的合适实现。