![](/img/trans.png)
[英]Failed %s type: %s%s, prop, Invalid prop `source` supplied to `Image`, expected one of type [number]
[英]Jest: Failed prop type: Invalid prop `source` supplied to `Image`, expected one of type [number]
我正在使用 jest 和 react-native 来运行单元测试用例。 每当遇到Image
它都会抛出以下警告
Warning: Failed prop type: Invalid prop `source` supplied to `Image`, expected one of type [number].
at Component (~/.../node_modules/react-native/jest/mockComponent.js:28:18)
at SummaryTile (~/.../src/components/home/SomeComponent.tsx:18:3)
23 | >
24 | {backgroundImg || (
> 25 | <Image
| ^
26 | source={require('images/cloud.png')}
27 | />
我试图将代码替换为
<Image src={{uri: require('images/cloud.png')}} />
正如https://stackoverflow.com/a/36460928/3855179中所建议的,但它开始抛出以下警告并且应用程序中断
Warning: Failed prop type: Invalid prop `source` supplied to `Image`, expected one of type [string, number].
at Image (http://expo_url:19000/node_modules/expo/AppEntry.bundle?platform=android&dev=true&hot=false&strict=false&minify=false:76209:43)
Jest Version: 26.6.3
React Native version: 0.64.3
Node Version: 16.14.2
知道如何处理吗?
查看您的文件结构以及 jest 配置文件会很有帮助。
但我最好的猜测是 - jest 无法在指定位置找到文件。
可以尝试的几件事:
(1) 尝试将文件位置更改为更明确一点,如下所示:
例如 - 如果图像在同一目录中 -- source={require('./images/cloud.png')}
例如 - 如果一个目录向上 - source={require('../images/cloud.png')}
(2) 尝试像这样模拟测试文件中的图像:
jest.mock("images/cloud.png")
(3) 在 jest 配置文件(或 package.json 文件,如果你有 jest 键)中为所有图像类型指定一个位置,这样 jest 将在遇到图像时将其用作图像源:
例如 -
moduleNameMapper: {
"\\.(jpg|jpeg|png|svg)$": "<rootDir>/images/dummy-image.js",
}
更多关于 moduleNameWrapper 的文档 - https://jestjs.io/docs/configuration#modulenamemapper-objectstring-string--arraystring
就我而言,我试图使用名称中有空格的图像,例如<rootDir>/stupidly_named images.png
。 看起来,React Native 对这些命名很满意,但 Jest 不满意。 填写空格 ( <rootDir>/stupidly_named_images.png
) 修复了错误。 而且我没有使用任何moduleNameWrapper
:
"react-native": "0.68.2"
"jest": "^28.1.0"
"@testing-library/react-native": "^9.1.0"
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.