alayor
alayor

Reputation: 5025

Getting `TypeError: jest.fn is not a function`

I'm trying to create the following unit test using 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();
    });
  });
});

But I'm getting the following error after running npm test.

TypeError: jest.fn is not a function

This is some section of my 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",
    ...
  }
}

What could be the reason I'm getting that error?

Upvotes: 19

Views: 25777

Answers (4)

Nirakar
Nirakar

Reputation: 1

It's already included in your Jest package, so please make sure that you type correct like this: ("mockReturnValue").

It will clear your error.

Upvotes: -1

Rick Hanlon II
Rick Hanlon II

Reputation: 21667

The jest object is automatically in scope within every test file, so there's no need to import it explicitly. If you do want to import the jest object directly, you want to import the jest-mock module, not the jest-cli module, via:

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

const mock = jest.fn();

Upvotes: 35

Artem Sapegin
Artem Sapegin

Reputation: 3122

You’re using a very old version of Jest that don’t support jest.fn. Jest has significantly improved since then and I highly recommend you to update to the latest version.

Also they don’t do auto mocking now.

Upvotes: 3

Anatoliy
Anatoliy

Reputation: 30073

It is a bit weird that documentation isn't mentioning that jest is not require('jest'); but require('jest-mock'), the following code should work on v22:

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

Upvotes: 7

Related Questions