设置ReactNative的NativeModules.RNDeviceInfo Jest
我试图切换我的反应原生应用程序从使用摩卡/柴到Jest,但我遇到了问题。设置ReactNative的NativeModules.RNDeviceInfo Jest
以前在我test/setup.js
我沿着线的东西:
const NativeModules = require('react-native-mock-render').NativeModules;
const MockRNDeviceInfo = require('./support/mock-device-info.js').MockRNDeviceInfo;
NativeModules.RNDeviceInfo = MockRNDeviceInfo;
然而,这并不用开玩笑工作,我得到尝试测试我的部件之一,当出现以下错误:
TypeError: Cannot read property 'appVersion' of undefined
at Object.getVersion (node_modules/react-native-device-info/deviceinfo.js:39:20)
什么是在NativeModules
上设置数值的正确方法?
开玩笑,你可以模拟使用类似的模块:
jest.mock('react-native-device-info',() => {
return {
getVersion:() => 4
}
})
我只嘲笑getVersion
方法,并返回一个随机数,因为这是没有适合你的一个,但你可能要在你的应用程序中添加你正在使用的那个(并将值更改为你想要的值)。您可以使用jest.fn util来模拟模块的功能。
我真的认为'setupFile'的路线长期会更好,而不是在每个测试中嘲笑。看到我的答案。 –
OP已经有一个安装文件,我不知道你在说什么。 –
我没有太多经验反应自己,但我确实有一个朋友。我向他提过这件事,他说你应该重新启动包装工。你可以这样做:首先:
通过退出终端窗口
终止打包然后
手动启动:
$ react-native start
我希望这有助于莫名其妙!
下面是使用Jest处理这个问题的最简单和最快捷的方法。一旦你知道了它真的不是一件麻烦事。
1.创建一个名为setup.js
(或任何你喜欢的)的文件,它将保存你所有的全局模拟。然后在您的package.json文件,你需要包括像这样
"jest": {
"preset": "react-native",
"setupFiles": [
"./jest/setup.js" <----- Here's your path to your setup file
]
}
您可以在Jest docs here
2.阅读更多有关setupFiles在该安装文件,模拟一个这个安装文件NativeModule这样的:
jest.mock('NativeModules',() => {
return {
RNDeviceInfo: {
appVersion: 2.1,
buildNumber: 12,
model: 'iPhone',
systemName: 'iOS',
systemVersion: '10.3',
},
}
}
这样做,将允许玩笑来访问你的模拟为react-native-device-info
在测试中的每一个。
您还可以根据需要模拟该返回对象中的任何其他NativeModule!希望这可以帮助。
是否有任何其他代码可能有助于重现此错误? '。/ support/mock-device-info.js'中是什么? –