代码之家  ›  专栏  ›  技术社区  ›  dragonfly

如何测试不变性和if-reducer-if-pure函数

  •  1
  • dragonfly  · 技术社区  · 7 年前

    在我的应用程序的多个地方都有漏洞:人们编写了不纯粹的简化程序,而且简化程序通过处理现有对象来修改现有状态。

    现在,在修复它之前,我想写一些测试来证明reducer有bug并修改了现有状态。

    我可以通过做几十个断言来手动完成这项工作,但也许有更好的方法。是否有任何匹配器/库可以帮助我解决这一问题 Jest ?

    0 回复  |  直到 7 年前
        1
  •  0
  •   Raúl Otaño    5 年前

    我通常使用这个库: redux-testkit ,您可以轻松测试还原剂,如果某些还原剂发生变异,测试将失败。还可以测试操作(通过thunk)和选择器。下面是一个例子:

      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