如何用jest模拟react-native模块(不是第三方模块)

时间:2017-07-05 16:39:39

标签: react-native jestjs

我正在尝试模拟一个带有react-native (不是第三方模块) 的模块,例如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或任何其他反应原生(不是第三方)模块?

2 个答案:

答案 0 :(得分:7)

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

答案 1 :(得分:0)

由于/node_modules/react-native/Libraries/Components/WebView/WebView.ios.js中的第213行,您收到此消息

decelerationRate: ScrollView.propTypes.decelerationRate

因为ScrollView被模拟ScrollView.propTypes === undefined

我通过添加:

解决了这个问题
import {PropTypes} from 'react';
ScrollView.propTypes = { decelerationRate: PropTypes.number };

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