web-dev-qa-db-ja.com

`TypeError:jest.fnは関数ではありません`を取得しています

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

エラーが発生する理由は何ですか。

11
alayor

非常に古いバージョンのJestを使用しています サポートしていませんjest.fn 。それ以来、Jestは大幅に改善されており、最新バージョンに更新することを強くお勧めします。

また、現在、自動モックは行いません。

3
Artem Sapegin

jest object はすべてのテストファイル内で自動的にスコープ内にあるため、明示的にインポートする必要はありません。 jestオブジェクトを直接インポートする場合は、jest-cliモジュールではなく、jest-mockモジュールを次のようにインポートします。

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

const mock = jest.fn();
16
Rick Hanlon II

ドキュメントがjestrequire('jest');ではなくrequire('jest-mock')であると言及していないことは少し奇妙です、次のコードはv22で動作するはずです:

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