gpt4 book ai didi

javascript - 如何在 Jest 中模拟 Webpack 的 require.context?

转载 作者:行者123 更新时间:2023-12-03 09:51:39 25 4
gpt4 key购买 nike

假设我有以下模块:

var modulesReq = require.context('.', false, /\.js$/);
modulesReq.keys().forEach(function(module) {
modulesReq(module);
});

Jest 提示,因为它不知道 require.context :
 FAIL  /foo/bar.spec.js (0s)
● Runtime Error
- TypeError: require.context is not a function

我怎么能 mock 它?我尝试使用 setupTestFrameworkScriptFile Jest 配置,但测试看不到我在 require 中所做的任何更改.

最佳答案

我有同样的问题,然后我做了一个“解决方案”。

我很确定这不是最佳选择。根据此处回答的要点,我最终停止使用它:

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 执行中,则使用 polyfill 函数)。

关于javascript - 如何在 Jest 中模拟 Webpack 的 require.context?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38332094/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com