У меня была такая же проблема, и я делаю «решение».
Я уверен, что это не лучший выбор. Я в конечном итоге останавливая его использования, точками отвеченных здесь:
https://github.com/facebookincubator/create-react-app/issues/517 https://github.com/facebook/jest/issues/2298
Но если это действительно необходимо, вы должны включать в себя polyfill ниже в каждом файле, который вы называете его (а не на самих тестах, потому что require
не будет глобально переопределен в среде Node).
// This condition actually should detect if it's an Node environment
if (typeof require.context === 'undefined') {
const fs = require('fs');
const path = require('path');
require.context = (base = '.', scanSubDirectories = false, regularExpression = /\.js$/) => {
const files = {};
function readDirectory(directory) {
fs.readdirSync(directory).forEach((file) => {
const fullPath = path.resolve(directory, file);
if (fs.statSync(fullPath).isDirectory()) {
if (scanSubDirectories) readDirectory(fullPath);
return;
}
if (!regularExpression.test(fullPath)) return;
files[fullPath] = true;
});
}
readDirectory(path.resolve(__dirname, base));
function Module(file) {
return require(file);
}
Module.keys =() => Object.keys(files);
return Module;
};
}
С помощью этой функции, вам не нужно изменять любой require.context
вызов, он будет выполнять с таким же поведением (если на WebPack, используя оригинал, и если в Jest с издевались функции).
Вы нашли ответ? – BigDong