得到'TypeError:jest.fn不是函数`

时间:2017-09-07 02:32:17

标签: javascript jasmine mocking jestjs

我尝试使用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 is not a function

这是我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",
    ...
  }
}

我可能会遇到这个错误。

4 个答案:

答案 0 :(得分:13)

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

// Not necessary inside a Jest test file
import jest from 'jest-mock';

const mock = jest.fn();

答案 1 :(得分:3)

你正在使用don’t support jest.fn的旧版Jest。从那时起,Jest得到了显着的改进,我强烈建议您更新到最新版本。

他们现在也不做自动模拟。

答案 2 :(得分:2)

文档没有提到jest不是require('jest');而是require('jest-mock'),这有点奇怪,以下代码应该适用于v22:

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

答案 3 :(得分:-1)

它已经包含在您的Jest软件包中,因此请确保您这样输入正确:("mockReturnValue")。

这将清除您的错误。