2017-07-05 98 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屬性設置的文件);