Ich hatte das gleiche Problem, dann mache ich eine "Lösung".
Ich bin mir ziemlich sicher, dass dies nicht die beste Wahl ist. Ich landete stoping es verwendet wird, durch die beantwortet Punkte hier:
https://github.com/facebookincubator/create-react-app/issues/517 https://github.com/facebook/jest/issues/2298
Aber wenn es wirklich brauchen, sollten Sie die polyfill unten in jeder Datei enthalten, die Sie nennen es (nicht auf die Tests selbst, weil die require
in einer Node-Umgebung nicht global übersteuert wird).
// 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;
};
}
Mit dieser Funktion geben Sie brauchen keinen require.context
Aufruf zu ändern, wird es mit dem gleichen Verhalten auszuführen (wenn auf webpack ist, das Original verwendet wird, und wenn in Jest, die verspottet Funktion).
Haben Sie Ihre Antwort gefunden? – BigDong