Jest模拟ES6模块

时间:2018-04-17 17:18:10

标签: javascript unit-testing jestjs es6-modules

如何使用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);
});

2 个答案:

答案 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。