【问题标题】:How to mock react-native module (not 3rd party module) with jest如何用 jest 模拟 react-native 模块(不是 3rd 方模块)
【发布时间】:2017-12-09 10:44:47
【问题描述】:

我正在尝试模拟一个带有 react-native (不是 3rd 方模块) 的模块,例如 LayoutAnimation:

import * as RN from 'react-native'

RN.LayoutAnimation = jest.fn()

但测试失败:

TypeError: Cannot read property 'decelerationRate' of undefined

  at Object.<anonymous> (node_modules/react-native/Libraries/Components/WebView/WebView.ios.js:555:3254)
  at Object.get WebView [as WebView] (node_modules/react-native/Libraries/react-native/react-native-implementation.js:73:22)

是否有任何其他方法可以模拟/存根 RN 模块,例如 LayoutAnimation 或任何其他 react-native(不是第 3 方)模块?

【问题讨论】:

    标签: react-native jestjs


    【解决方案1】:

    尝试简单地做jest.mock('LayoutAnimation');

    【讨论】:

    • 谢谢,这成功了!你介意分享这是如何工作的吗? Jest 知道 react-native API 吗?
    • 在你的 package.json 文件中你有这个:"jest": { "preset": "react-native"}。所以是的,jest 知道 react-native API
    【解决方案2】:

    您收到此消息是因为 /node_modules/react-native/Libraries/Components/WebView/WebView.ios.js 中的第 217 行

    decelerationRate: ScrollView.propTypes.decelerationRate
    

    因为 ScrollView 被嘲笑 ScrollView.propTypes === undefined

    我通过添加解决了这个问题:

    import {PropTypes} from 'react';
    ScrollView.propTypes = { decelerationRate: PropTypes.number };
    

    设置脚本文件(由 package.json 的 jest 部分中的 setupTestFrameworkScriptFile 属性设置的文件);

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-02-23
      • 2021-10-02
      • 2019-08-15
      • 2019-12-26
      • 2019-08-17
      • 2018-02-19
      • 2021-02-04
      相关资源
      最近更新 更多