如何使用Jest模拟ES6模块导入? 例如,我们有以下结构:
// ../store.js
function getData(data) {
return data / 3;
}
export { getData };
// ../myModule.js
import { getData } from './store';
function myModule(param) {
return getData(param) * 4;
}
export { myModule };
// ./myModule.test.js
import { myModule ] from '../myModule';
test('2 x 4 equal 8', () => {
expect(getData(6)).toBe(8);
});
答案 0 :(得分:0)
要模拟ES2015模块,您的jest配置需要首先使用babel来转换模块。
您需要new_job="0 * * * * your_command"
preceding_cron_jobs=$(crontab -l || echo "")
preceding_cron_jobs=$(echo "$preceding_cron_jobs" | grep -v your_command )
(echo "$preceding_cron_jobs" ; echo "$new_job") | crontab -
然后你的package.json应该是这样的:
yarn add --dev babel-jest babel-preset-env
其次,在您的 "jest": {
"moduleFileExtensions": [
"js",
"jsx"
],
"moduleDirectories": [
"node_modules"
],
"transform": {
"^.+\\.(js|jsx|mjs)$": "<rootDir>/node_modules/babel-jest"
},
"transformIgnorePatterns": [
"[/\\\\]node_modules[/\\\\].+\\.(js|jsx|mjs)$",
"^.+\\.module\\.css$"
]
}
中,您需要像.babelrc
那样指定您的环境:
test
完成后,您可以模拟一个模块。例如,创建一个名为{
"presets": [
["env", "react"]
],
"env": {
"development": {
"presets": [["env"], "react"]
},
"production": {
"presets": [["env"], "react"]
},
"test": {
"presets": [["env"], "react"]
}
}
}
的文件(其中mocks文件夹与__mocks__/store.js
文件位于同一级别。在mocks文件中,您可以执行类似
store.js
并在您的const getData = () => return 42;
export { getData };
中需要此行:
myModule.test.js
如果需要,您可以在此处查看我的某个存储库中的工作示例: https://github.com/AnilRedshift/linkedINonymous/
答案 1 :(得分:0)
如果要使用笑话进行自动测试,则必须在测试之前添加/描述下一个呼叫
jest.mock('../myModule');
它返回所有函数的无效结果。
其他选择是模拟混合:
const mock: any = jest.genMockFromModule('../myModule');
mock.getData = jest.fn().mockImplementation(6);
对方法getData的调用返回6。