当我运行npm test
时:
➜ mobile git:(develop) ✗ npm test
> jest
FAIL __tests__/index.js
● Test suite failed to run
TypeError: Cannot read property 'fs' of undefined
at Object.<anonymous> (node_modules/react-native-cached-image/utils/fsUtils.js:9:12)
at Object.<anonymous> (node_modules/react-native-cached-image/ImageCacheManager.js:5:13)
at Object.<anonymous> (node_modules/react-native-cached-image/CachedImage.js:13:23)
我发现这与react-native-cached-image
对fs
的依赖性有关
我不得不以某种方式模仿fs吗?我尝试了几件事,但没有成功。
答案 0 :(得分:3)
使用fs模拟组件
如果可能的话,我会建议您模拟 react-native-image-cache ,而不是模拟fs,因为fs被该包的一个依赖项使用。您可以看到the line listed in you're error。
您可以像下面这样模拟react-native-image-cache:
jest.mock('react-native-img-cache', () => {
return {
DocumentDir: () => {},
ImageCache: {
get: {
clear: () => {}
}
}
}
})
在同样的问题上,应该可以模拟使用fs并导致错误的 react-native-fetch-blob 。 return语句的属性取决于image-cache lib使用的方法和属性。可能你不需要下面列出的那么多,但现在你知道可能不仅仅是fs。
jest.mock('react-native-fetch-blob', () => {
return {
DocumentDir: () => {},
fetch: () => {},
base64: () => {},
android: () => {},
ios: () => {},
config: () => {},
session: () => {},
fs: {
dirs: {
MainBundleDir: () => {},
CacheDir: () => {},
DocumentDir: () => {},
},
},
wrap: () => {},
polyfill: () => {},
JSONStream: () => {}
}
})
模拟fs
如果您想要/需要专门模拟fs,您可以执行以下操作:
有时甚至可以做类似的事情:
fs = require("fs")
fs.readFile = function (filename, cb) {
cb(null, new Buffer("fake contents");
};
// etc
但请记住,fs在依赖包中的某处使用。在这种情况下,我不确定代码是否正常工作,这就是我将其他选项放在顶部的原因。