configuration - Jest 无法解析图像文件
问题描述
我正在尝试设置配置和模拟文件,以便开玩笑地解析/忽略图像文件,以便通过测试。几乎每一个在线资源都会让我找到位于的 jest 文档:https ://jestjs.io/docs/webpack#handling-static-assets ,它会告诉你如何处理这种情况。但是,在我的情况下不是。我已经尝试了创建模拟文件和使用转换器的两种选择。我当前的 jest.config.js:
module.exports = {
projects: [
{
displayName: 'Unit',
testMatch: ["**/?(*.)+(spec|test).[tj]s?(x)"],
setupFilesAfterEnv: ["<rootDir>/jest.setup.ts"],
testPathIgnorePatterns: ["<rootDir>/.next/", "<rootDir>/node_modules/", "<rootDir>/cypress/"],
moduleFileExtensions: ["js", "jsx", "ts", "tsx"],
moduleDirectories: ["node_modules", "bower_components", "shared"],
moduleNameMapper: {
"^.+\\.(jpg|jpeg|png|gif|eot|otf|webp|svg|ttf|woff|woff2|mp4|webm|wav|mp3|m4a|aac|oga)$": "<rootDir>/__mocks__/fileMock.js",
'^.+\\.(css|sass|scss)$': '<rootDir>/__mocks__/styleMock.js'
},
// transform: {
// "\\.js$": "jest",
// "\\.(jpg|jpeg|png|gif|eot|otf|webp|svg|ttf|woff|woff2|mp4|webm|wav|mp3|m4a|aac|oga)$": "<rootDir>/fileTransformer.js"
// //'^.+\\.(js|jsx|ts|tsx)$': ['babel-jest', { presets: ['next/babel'] }],
// }
},
{
displayName: 'Pacts',
testMatch: ["**/?(*.)+(pacttest).[tj]s?(x)"],
testPathIgnorePatterns: ["<rootDir>/.next/", "<rootDir>/node_modules/", "<rootDir>/cypress/"],
watchPathIgnorePatterns: ["pact/logs/*", "pact/pacts/*"],
}
],
};
我的文件模拟.js:
module.exports = 'test-file-stub';
我的 styleMock.js:
module.exports = {};
我的文件Transformer.js:
const path = require('path');
module.exports = {
process(src, filename, config, options) {
return 'module.exports = ' + JSON.stringify(path.basename(filename)) + ';';
},
};
//export default module.exports;
我一直在反复尝试配置中的不同选项,但它们几乎都导致我出现相同的两个错误,一个是我尝试使用变压器时,另一个是没有。注释掉转换器后,我在 fileMock.js 文件中抛出 2 个错误:
- 类型错误:无效的 URL:测试文件存根
- 无法解析 src “test-file-stub”
next/image
这两个都指的是模拟的建议字符串。我最初认为字符串可能是代码实际处理某事的占位符。但经过一番阅读,我的理解是它实际上应该是一个字符串。也许它是取决于我的环境的特定字符串?并且next/image
是我从中导入图像组件的地方。
我优先考虑模拟(如果我错了,请纠正我),因为我的理解是模拟告诉 jest 忽略图像文件并继续进行其余的测试,而转换器实际上试图将文件类型从 js 更改为jpg 或 png 或图像的任何文件类型。然而,我正在尽我所能。当我尝试使用未注释的变压器部分运行测试时,我在任何测试运行之前收到错误消息:TypeError: Jest: a transformm must export something。(这就是为什么有一个注释掉的导出默认语句。)
这是我第一次尝试这样的事情,我想我已经到了一个我想不出其他可以尝试的地步。如果有人经历过这样的事情,请给我一些知识。我不确定我的模拟文件是否设置不正确,或者它是否在配置中。
谢谢。
解决方案
我可以通过在此处创建图像 URL 来解决此问题: https ://www.base64-image.de/ 并用生成的 URL 字符串替换“test-file-stub”字符串。
module.exports = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAIAAACQd1PeAAABhWlDQ1BJQ0MgcHJvZmlsZQAAKJF9kT1Iw0AcxV/TSotUHeyg4pChOogFURFHrUIRKoRaoVUHk0s/hCYNSYuLo+BacPBjserg4qyrg6sgCH6AuLk5KbpIif9LCi1iPDjux7t7j7t3gFAvMc0KjAGaXjFTibiYya6IwVeE0I9ujCAgM8uYlaQkPMfXPXx8vYvxLO9zf44uNWcxwCcSzzDDrBCvE09tVgzO+8QRVpRV4nPiUZMuSPzIdcXlN84FhwWeGTHTqTniCLFYaGOljVnR1IgniaOqplO+kHFZ5bzFWStVWfOe/IXhnL68xHWag0hgAYuQIEJBFRsooYIYrTopFlK0H/fwDzh+iVwKuTbAyDGPMjTIjh/8D353a+Unxt2kcBzoeLHtjyEguAs0arb9fWzbjRPA/wxc6S1/uQ5Mf5Jea2nRI6BnG7i4bmnKHnC5A/Q9GbIpO5KfppDPA+9n9E1ZoPcW6Fx1e2vu4/QBSFNXyRvg4BAYLlD2mse7Q+29/Xum2d8PVXFym6OczU4AAAAJcEhZcwAALiMAAC4jAXilP3YAAAAHdElNRQflCBkOKh9/wZ+SAAAAGXRFWHRDb21tZW50AENyZWF0ZWQgd2l0aCBHSU1QV4EOFwAAAAxJREFUCNdj+P//PwAF/gL+3MxZ5wAAAABJRU5ErkJggg==';
推荐阅读
- javascript - React - 使用基于变量的三元运算符的条件输出
- javascript - 如何在three.js中设置网格大小以适应视口高度和屏幕?
- java - 为什么我无法从当前目录之外运行 php 文件?
- arrays - 范围 (l, r) 中小于 'x' 的元素数
- math - 线性插值:无论移动多快都到达移动目的地
- firebase - 如何在谷歌云功能中为 imagemagick 安装自定义字体
- websocket - WebSocket 无法连接谷歌计算虚拟机上的 Tomcat 服务器
- android - 如何从协程范围返回值
- flutter - 在颤振中,firebase 云消息传递在生产中的 oneplus 6/6t 中不起作用
- python - 如何修复 ValueError:没有足够的值在 Python 中解包(预期为 3,得到 1)?