当我运行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吗?我尝试了几件事,但没有成功。
使用FS
模拟组件而不是嘲笑FS,我建议您在可能的情况下嘲笑 React-Native-nimage-cache ,因为该软件包的依赖项之一使用了FS。您可以看到错误中列出的行。
您只需模拟以下内容:
jest.mock('react-native-img-cache', () => {
return {
DocumentDir: () => {},
ImageCache: {
get: {
clear: () => {}
}
}
}
})
在同一问题上,应该可以模拟使用fs并导致误差的反应。返回语句上的属性取决于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,则可以执行以下操作:
- 研究图书馆反应 - 现象图像图书馆使用的测试
- 使用NPM软件包之一嘲笑FS:模拟FS,Jest-Plugin-FS或Fake-FS
- 自己做
有时甚至有可能做类似的事情:
fs = require("fs")
fs.readFile = function (filename, cb) {
cb(null, new Buffer("fake contents");
};
// etc
,但请记住,FS在依赖的软件包中使用。在这种情况下,我不确定代码是否正常工作,这就是为什么我将其他选项放在顶部。