2017-07-05 64 views
3

我试图嘲弄模块附带反应母语(没有第三方模块),如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或任何其他反应天然的(不是第三方)模块?

回答

3

尽量简单地做jest.mock('LayoutAnimation');

+0

谢谢,这工作!你介意分享它的工作原理吗? Jest是否意识到反应原生API? – rcorrie

+0

在你的文件package.json中你有这个:'“jest”:{“preset”:“react-native”}'。所以是的,jest知道反应原生API –

0

您在/node_modules/react-native/Libraries/Components/WebView/WebView.ios.js了,因为线的这条消息№217

decelerationRate: ScrollView.propTypes.decelerationRate 

由于滚动型被嘲笑ScrollView.propTypes ===未定义

我加入解决了这个问题:

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

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