如果你正在使用 Babel,请查看 babel-plugin-require-context-hook。 Storybook 的配置说明可在 Storyshots | Configure Jest to work with Webpack's require.context() 获得,但它们不是 Storyshots/Storybook 特定的。
总结一下:
安装插件。
yarn add babel-plugin-require-context-hook --dev
创建一个文件.jest/register-context.js,内容如下:
import registerRequireContextHook from 'babel-plugin-require-context-hook/register';
registerRequireContextHook();
配置 Jest(该文件取决于您存储 Jest 配置的位置,例如package.json):
setupFiles: ['<rootDir>/.jest/register-context.js']
将插件添加到.babelrc
{
"presets": ["..."],
"plugins": ["..."],
"env": {
"test": {
"plugins": ["require-context-hook"]
}
}
}
或者,将其添加到babel.config.js:
module.exports = function(api) {
api.cache(true)
const presets = [...]
const plugins = [...]
if (process.env.NODE_ENV === "test") {
plugins.push("require-context-hook")
}
return {
presets,
plugins
}
}
值得注意的是,使用babel.config.js 而不是.babelrc 可能会导致问题。比如我在babel.config.js中定义require-context-hook插件时发现:
- Jest 22 没有接听;
- Jest 23 捡到了;但是
-
jest --coverage 没接(也许伊斯坦布尔没有跟上 Babel 7 的速度?)。
在所有情况下,.babelrc 配置都可以。
关于Edmundo Rodrigues's answer的备注
这个babel-plugin-require-context-hook 插件使用的代码类似于 Edmundo Rodrigues 在此处的回答。埃德蒙多的道具!因为该插件是作为 Babel 插件实现的,所以它避免了静态分析问题。例如使用 Edmundo 的解决方案,Webpack 警告:
Critical dependency: require function is used in a way in which dependencies cannot be statically extracted
尽管有警告,但 Edmundo 的解决方案是最强大的,因为它不依赖 Babel。