注意到最初的问题指出,在所呈现的情况下,模拟不是一个选项,但我在寻找解决方案时多次遇到了这个 Stack Overflow 问题,并想分享一下我最终针对我的情况提出的建议。
我能够通过包装来绕过 e2e 测试的限制react-native-image-picker
在我自己的导出中:
ImagePicker.js
import ImagePicker from 'react-native-image-picker';
export default ImagePicker;
然后使用自定义扩展创建模拟(即e2e.js
):
ImagePicker.e2e.js
const mockImageData = '/9j/4AAQSkZ...MORE BASE64 DATA OF CUTE KITTENS HERE.../9k=';
export default {
showImagePicker: function showImagePicker(options, callback) {
if (typeof options === 'function') {
callback = options;
}
callback({
data: mockImageData,
});
},
};
最后,配置 Metro 捆绑程序以优先考虑您的自定义扩展:
[项目根目录]/rn-cli.config.js
const defaultSourceExts = require('metro-config/src/defaults/defaults')
.sourceExts;
module.exports = {
resolver: {
sourceExts: process.env.RN_SRC_EXT
? process.env.RN_SRC_EXT.split(',').concat(defaultSourceExts)
: defaultSourceExts,
},
};
然后运行RN_SRC_EXT
设置为自定义扩展的环境变量:
RN_SRC_EXT=e2e.js react-native start
See the 排毒嘲笑指南 https://github.com/wix/Detox/blob/master/docs/Guide.Mocking.md了解更多信息。