代码之家  ›  专栏  ›  技术社区  ›  Amir-Mousavi

设置localStorage以使用jest测试React应用程序

  •  4
  • Amir-Mousavi  · 技术社区  · 6 年前

    我创建了一个空应用程序 create-react-app . 它在pckage.json上提供了一个测试脚本和一个示例App.test.js。第一步,我想根据 create-react-app . 在我的应用程序中,我将使用本地存储。 假设下面这样的动作需要测试

    export const cancel = () => {
      localStorage.removeItem("MyAppData");
      return { type: types.USER_CANCEL};
    };
    

    除了酶部分,它还演示了如何初始化 localStorage . 所以我最后得到了一个 setupTests.js 像文件一样

    import { configure } from "enzyme";
    import Adapter from "enzyme-adapter-react-16";
    // react-testing-library renders your components to document.body,
    // this will ensure they're removed after each test.
    import "react-testing-library/cleanup-after-each";
    // this adds jest-dom's custom assertions
    import "jest-dom/extend-expect";
    
    configure({ adapter: new Adapter() });
    
    const localStorageMock = {
      getItem: jest.fn(),
      setItem: jest.fn(),
      clear: jest.fn()
    };
    global.localStorage = localStorageMock;
    

    如果我不进口 jest 从jest或jest dom或jest酵素,ESLinter在 jest.fn() 这个笑话是没有定义的。当我导入并运行 yarn test 我明白了

    $ react-scripts test --env=jsdom
     FAIL  src\App.test.js
      ● Test suite failed to run
    
        TypeError: _jest2.default.fn is not a function
    
          at Object.<anonymous> (src/setupTests.js:15:27)
              at <anonymous>
    

    我真的不知道从QAs这里和其他论坛我应该如何设置本地存储测试。

    2 回复  |  直到 6 年前
        1
  •  1
  •   megamit    6 年前

    您不需要将jest导入到测试文件中。

    你应该告诉埃斯林 Environment 它应该出现在文件中,这样它就知道存在什么全局变量。

    将此添加到任何使用jest globals的文件的顶部

    /* eslint-env jest */
    
        2
  •  0
  •   Amir-Mousavi    6 年前

    我真的不知道到底发生了什么,一些与jest、jet-dom、jest-enzyme相关的包正在引发冲突。但是在删除package-lock.json、yarn.lock、node_模块、从package.json中的依赖项中删除jest,然后执行npm安装和yarn安装之后,我成功地让它工作了!