Я не могу изменить фиктивное поведение функции в другой функции после того, как последняя импортирована в мой тестовый модуль.«functionUsingMockFunction» вызывает «mockFunction» и должен что-то делать со своим возвращаемым значением.Однако, когда тест настроен, как показано ниже, он терпит неудачу, потому что «mockFunction» возвращает неопределенное значение.Кроме того, я могу изменить mockImplementation зависимостей npm, где бы я ни хотел, но я не могу легко смоделировать функции, экспортируемые в мои собственные модули."jest.resetModules ()" в beforeEach тоже не работает.
jest.mock("../moduleToMock");
const { mockFunction } = require("../moduleToMock");
// if mockFunction.mockImplementation was defined here, it would work
const { functionUsingMockFunction } = require("./someModule");
...
let result;
beforeEach(async () => {
mockFunction.mockImplementation(() => ({
// return some object
}));
// if functionUsingMockFunction was imported now, it would also work
result = await functionUsingMockFunction();
});
it("does something", () => {
expect(result).toEqual("some result");
});
});
Эта установка работает в моем другом проекте, поэтому я думаю, что это может быть связано с моей конфигурацией шутка / бабель, однако я не обнаружил каких-либо существенных различий.Я использую узел 10.15.1.Мои зависимости разработчиков:
"devDependencies": {
"@babel/core": "^7.0.0",
"@babel/plugin-proposal-class-properties": "^7.0.0",
"@babel/preset-env": "^7.4.4",
"@babel/preset-react": "^7.0.0",
"babel-core": "7.0.0-bridge.0",
"babel-eslint": "^10.0.0",
"babel-jest": "24.8.0",
"babel-loader": "^8.0.0",
"clean-webpack-plugin": "^1.0.0",
"concurrently": "^4.0.0",
"css-loader": "^2.0.0",
"enzyme": "^3.9.0",
"enzyme-adapter-react-16": "^1.12.1",
"eslint": "^5.16.0",
"eslint-config-airbnb": "^17.0.0",
"eslint-plugin-import": "^2.11.0",
"eslint-plugin-jest": "^22.5.1",
"eslint-plugin-jsx-a11y": "^6.0.3",
"eslint-plugin-react": "^7.7.0",
"file-loader": "^3.0.0",
"html-webpack-plugin": "^3.2.0",
"jest": "24.8.0",
"nodemon": "^1.17.3",
"react-test-renderer": "^16.8.6",
"style-loader": "^0.23.0",
"url-loader": "^1.0.1",
"webpack": "^4.5.0",
"webpack-cli": "^3.0.8",
"webpack-dev-server": "^3.1.3"
}
Конфигурация:
// babel.config.js
module.exports = {
presets: ["@babel/preset-env", "@babel/preset-react"],
plugins: ["@babel/plugin-proposal-class-properties"]
};
// jest.config.js
module.exports = {
setupFilesAfterEnv: ["./test/setupTests.js"],
moduleNameMapper: {
"\\.(jpg|jpeg|png|gif|eot|otf|webp|svg|ttf|woff|woff2|mp4|webm|wav|mp3|m4a|aac|oga)$":
"<rootDir>/__mocks__/fileMock.js",
"\\.(css|less)$": "<rootDir>/__mocks__/styleMock.js"
}
};
// setupTests.js
import { configure } from "enzyme";
import Adapter from "enzyme-adapter-react-16";
import "babel-polyfill";
configure({ adapter: new Adapter() });