我试图将我的react原生应用从使用Mocha/Chai切换到Jest,但遇到了一个问题。
以前在我的test/setup.js
中,我有一些沿着的内容:
const NativeModules = require('react-native-mock-render').NativeModules;
const MockRNDeviceInfo = require('./support/mock-device-info.js').MockRNDeviceInfo;
NativeModules.RNDeviceInfo = MockRNDeviceInfo;
然而,这在jest中不起作用,因为我在尝试测试我的一个组件时得到了以下错误:
TypeError: Cannot read property 'appVersion' of undefined
at Object.getVersion (node_modules/react-native-device-info/deviceinfo.js:39:20)
在NativeModules
上设置值的正确方法是什么?
4条答案
按热度按时间9avjhtql1#
2020答案
现在,
react-native-device-info
提供了一个测试助手。因此,可以使用
链接到文件https://github.com/react-native-device-info/react-native-device-info/blob/cd60ebeeab28611dd122dff0a5ae1fdd40733a80/jest/react-native-device-info-mock.js
aurhwmvo2#
在Jest中,你可以使用类似下面的代码来模拟模块:
我只是模拟了
getVersion
方法并返回了一个随机数,因为这是您失败的方法,但您可能必须添加您在应用程序中使用的方法(并将值更改为您想要的值)。您还可以使用jest.fn实用程序来模拟模块的函数。
7uhlpewt3#
您还可以在
__mocks__
文件夹中创建名为react-native-device-info.js
的文件在文件中放入以下内容
这也在documentation中指定
xzv2uavs4#
我自己没有太多的React经验,但我有一个朋友这样做。我向他提到了这一点,他说你应该重新启动打包程序。你可以这样做,首先:
通过退出终端窗口终止打包程序
那么
手动启动:
希望这能有所帮助!