使用 webpack 配置运行 Jest 测试
Posted
技术标签:
【中文标题】使用 webpack 配置运行 Jest 测试【英文标题】:running Jest tests with webpack configuration 【发布时间】:2019-07-16 23:46:52 【问题描述】:我正在使用 next-optimized-images
包来优化我在 next.js 项目中的图像。
这是一个配置,应该让我能够使用 URL 参数(例如 ?sizes[]=300
)自动加载图像并调整它们的大小
什么有效
next.config.js
const withOptimizedImages = require("next-optimized-images");
module.exports = withOptimizedImages(
optimizeImagesInDev: true,
module:
rules: [
test: /\.(jpe?g|png)$/i,
loader: "responsive-loader",
options:
adapter: require("responsive-loader/sharp"),
,
,
],
,
);
我也在使用png
和jpg
优化库:
"imagemin-mozjpeg": "^8.0.0"
,"imagemin-optipng": "^6.0.0"
我的 JSON/JS 文件的图像结构如下:
...,
imgs: [
require("../../static/img/foo/bar.jpg?sizes[]=200,sizes[]=300"),
...,
]
这样当将它与responsive-loader
一起使用时,所有内容都会按应有的方式加载,即图像的路径被替换为应用程序中包含两条不同大小的路径的对象。
什么不起作用
然而,在我在每个图像数组元素中引入require
声明之前,那些测试(开玩笑测试)不起作用。它只是说它无法导入所需的模块,因为很可能它没有使用 webpack 配置来解析这些带有参数的路径。我如何告诉它这样做?
错误信息:
Cannot find module '../../static/img/foo/bar.jpg?sizes[]=200,sizes[]=300' from 'categories.js'
我不能简单地使用图像的路径,然后在 <img src=require(path) />
标记中使用 require
它们,因为它们必须是相对的才能使这个库工作,而且我在许多不同的组件中使用这些图像(有些是嵌套的) .使用这个库,webpack 配置在涉及绝对路径时变得非常困难,而且带有 size
等参数的路径也无法解析。
【问题讨论】:
【参考方案1】:想通了。您所要做的就是为 jest 创建一个配置文件。
在您的 package.json
中,将 "test"
从 react-scripts test
更改为 jest -c jest.config.js
jest.config.js
"bail": true,
"verbose": true,
"moduleNameMapper":
"^.*(jpe?g|png).*$": "<rootDir>/assetsTransformer.js"
使用moduleNameMapper
匹配您需要的任何图片扩展名非常重要。创建另一个名为 assetsTransformer.js
的文件,它将处理您所需的图像。如果您不需要,您实际上不必对导入的图像执行任何操作。就我而言,我没有,所以我只是创建了一个包含以下内容的文件:
assetsTransformer.js
module.exports =
process(src, filename, config, options)
return;
,
;
【讨论】:
以上是关于使用 webpack 配置运行 Jest 测试的主要内容,如果未能解决你的问题,请参考以下文章
我无法通过 symfony/webpack-encore 使用 Jest 和 Vuejs 运行测试
如何同时观看运行 Jest 测试的 webpack-dev-server?
在 Jest 测试中使用 Webpack 的 DefinePlugin 变量