反应本机测试失败:"TypeError: Cannot read property 'fs' of undefined"



当我运行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,则可以执行以下操作:

  1. 研究图书馆反应 - 现象图像图书馆使用的测试
  2. 使用NPM软件包之一嘲笑FS:模拟FS,Jest-Plugin-FS或Fake-FS
  3. 自己做

有时甚至有可能做类似的事情:

fs = require("fs")
fs.readFile = function (filename, cb) {
  cb(null, new Buffer("fake contents");
};
// etc

,但请记住,FS在依赖的软件包中使用。在这种情况下,我不确定代码是否正常工作,这就是为什么我将其他选项放在顶部。

相关内容

  • 没有找到相关文章

最新更新