如何测试不变性以及Jest中的纯函数是否可归约

时间:2018-07-05 11:43:32

标签: reactjs jestjs

在我的应用程序的多个位置,存在一些错误:人们编写了不完全精简的化简器,还化简器通过处理现有对象来修改现有状态。

现在,在修复该问题之前,我想编写测试来证明reducer具有错误并修改了现有状态。

我可以通过执行许多断言来手动完成此操作,但是也许有更好的方法可以做到这一点。在Jest的上下文中是否有匹配器/库可以帮助我解决这个问题?

1 个答案:

答案 0 :(得分:0)

我通常使用以下库:redux-testkit,您可以轻松测试化简器,如果某些化简器发生突变,则测试将失败。还可以测试动作(按重击)和选择器。这是一个示例:

  test("when SET_FORM_VALUE, should set formValues", () => {
    const previousState = { formValues: null };
    const fakeFormValues = {
      fakeValue: "fake-value"
    };
    Reducer(reducer)
      .withState(previousState)
      .expect({ type: SET_FORM_VALUE, payload: fakeFormValues })
      .toChangeInState({
        formValues: fakeFormValues
      });
  });

此外,您可以使用deep-freeze之类的另一个库。这一步深深地应用了Object.freeze。如果在您要测试的方法中修改了对象,则测试会引发错误。

    test("should not be modified", () => {
      const obj = { value: 5 };

      deepFreeze(obj);

      obj.value = 6;
    });

enter image description here