reactjs 使用Jest设置ReactNative的本机模块.RNDeviceInfo

jjjwad0x  于 2023-01-17  发布在  React
关注(0)|答案(4)|浏览(123)

我试图将我的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上设置值的正确方法是什么?

9avjhtql

9avjhtql1#

2020答案

现在,react-native-device-info提供了一个测试助手。
因此,可以使用

import mockRNDeviceInfo from 'react-native-device-info/jest/react-native-device-info-mock'; // or use require

jest.mock('react-native-device-info', () => mockRNDeviceInfo);

链接到文件https://github.com/react-native-device-info/react-native-device-info/blob/cd60ebeeab28611dd122dff0a5ae1fdd40733a80/jest/react-native-device-info-mock.js

aurhwmvo

aurhwmvo2#

在Jest中,你可以使用类似下面的代码来模拟模块:

jest.mock('react-native-device-info', () => {
  return {
    getVersion: () => 4
  }
})

我只是模拟了getVersion方法并返回了一个随机数,因为这是您失败的方法,但您可能必须添加您在应用程序中使用的方法(并将值更改为您想要的值)。
您还可以使用jest.fn实用程序来模拟模块的函数。

7uhlpewt

7uhlpewt3#

您还可以在__mocks__文件夹中创建名为react-native-device-info.js的文件
在文件中放入以下内容

import mockRNDeviceInfo from "react-native-device-info/jest/react-native-device-info-mock";

export default mockRNDeviceInfo;

这也在documentation中指定

xzv2uavs

xzv2uavs4#

我自己没有太多的React经验,但我有一个朋友这样做。我向他提到了这一点,他说你应该重新启动打包程序。你可以这样做,首先:
通过退出终端窗口终止打包程序
那么
手动启动:

$ react-native start

希望这能有所帮助!

相关问题