为什么我的减速器仍然在我的测试用例中设置无效输入的状态?

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 的合适实现。