【问题标题】:Getting `TypeError: jest.fn is not a function`获取`TypeError:jest.fn 不是函数`
【发布时间】:2018-02-15 15:19:15
【问题描述】:

我正在尝试使用 Jest 创建以下单元测试。

jest.dontMock("pointsAwardingActions.js");
describe("points awarding actions", () => {
  describe("award points", () => {
    it("should dispatch begin ajax action", () => {
      var pointsAwardingActions = require("pointsAwardingActions.js");
      const mockedDispatch = jest.fn();
    });
  });
});

但我在运行npm test 后遇到以下错误。

TypeError: jest.fn 不是函数

这是我package.json的一部分:

{
  "scripts": {
    "test": "jest"
  },
  "author": "alayor",
  "license": "ISC",
  "jest": {
    "scriptPreprocessor": "<rootDir>/node_modules/babel-jest",
    "testFileExtensions": ["spec.js"],
    "moduleFileExtensions": ["js"],
    "collectCoverage": "true"
  },
  "dependencies": {
    "babel-cli": "6.8.0",
    "babel-core": "6.8.0",
    "babel-jest": "^6.0.1",
    "babel-loader": "6.2.4",
    "babel-plugin-react-display-name": "2.0.0",
    "babel-polyfill": "6.8.0",
    "babel-preset-es2015": "6.6.0",
    "babel-preset-react": "6.5.0",
    "babel-preset-react-hmre": "1.1.1",
    "expect": "1.19.0",
    "express": "4.13.4",
    "jest": "^0.1.40",
    "jest-cli": "^0.8.1",
    ...
  }
}

我收到该错误的原因可能是什么?

【问题讨论】:

    标签: javascript jasmine mocking jestjs


    【解决方案1】:

    jest object 自动在每个测试文件的范围内,因此无需显式导入它。如果您确实想直接导入 jest 对象,则需要导入 jest-mock 模块,而不是 jest-cli 模块,方法是:

    // Not necessary inside a Jest test file
    import jest from 'jest-mock';
    
    const mock = jest.fn();
    

    【讨论】:

    • 这就是我要找的,这个解决spyOn不是函数,fn也不是函数
    • 我是 redux 和 jest 的新手,我无法描述搜索这个的小时数。你救了我的命
    【解决方案2】:

    文档没有提到jest 不是require('jest'); 而是require('jest-mock') 有点奇怪,下面的代码应该可以在 v22 上运行:

    const jest = require('jest-mock');
    const spy = jest.fn();
    

    【讨论】:

    • "jest 对象自动在每个测试文件的范围内。" facebook.github.io/jest/docs/en/jest-object.html
    • @RickHanlonII 每个测试文件...但不是 mocks 目录中的文件。
    • 另一个有用的情况:在 Node 的控制台上玩,你需要专门要求它
    【解决方案3】:

    您使用的是非常旧的 Jest 版本,即 don’t support jest.fn。从那时起,Jest 有了显着改进,我强烈建议您更新到最新版本。

    而且他们现在不做自动模拟。

    【讨论】:

    【解决方案4】:

    它已包含在您的 Jest 包中,因此请确保您输入正确,如下所示:("mockReturnValue")。

    它会清除你的错误。

    【讨论】:

      猜你喜欢
      • 2021-09-29
      • 2022-01-03
      • 2018-11-20
      • 2016-12-19
      • 1970-01-01
      • 1970-01-01
      • 2019-05-03
      • 2021-07-13
      • 2018-01-11
      相关资源
      最近更新 更多