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",
...
}
}
エラーが発生する理由は何ですか。
非常に古いバージョンのJestを使用しています サポートしていませんjest.fn
。それ以来、Jestは大幅に改善されており、最新バージョンに更新することを強くお勧めします。
また、現在、自動モックは行いません。
jest object はすべてのテストファイル内で自動的にスコープ内にあるため、明示的にインポートする必要はありません。 jestオブジェクトを直接インポートする場合は、jest-cliモジュールではなく、jest-mockモジュールを次のようにインポートします。
// Not necessary inside a Jest test file
import jest from 'jest-mock';
const mock = jest.fn();
ドキュメントがjest
がrequire('jest');
ではなくrequire('jest-mock')
であると言及していないことは少し奇妙です、次のコードはv22で動作するはずです:
const jest = require('jest-mock');
const spy = jest.fn();