使用 Jest 设置 ReactNative 的 NativeModules.RNDeviceInfo

Kyl*_*cot 6 reactjs jestjs react-native

我正在尝试将我的 React Native 应用程序从使用 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;
Run Code Online (Sandbox Code Playgroud)

但是,这不适用于 jest,因为在尝试测试我的组件之一时出现以下错误:

TypeError: Cannot read property 'appVersion' of undefined
  at Object.getVersion (node_modules/react-native-device-info/deviceinfo.js:39:20)
Run Code Online (Sandbox Code Playgroud)

设置值的正确方法是什么NativeModules

Has*_*Eqx 19

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);
Run Code Online (Sandbox Code Playgroud)

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


Bal*_*zar 6

在 Jest 中,您可以使用以下内容模拟模块:

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

我只是模拟了该getVersion方法并返回了一个随机数,因为那是您失败的那个,但是您可能必须添加您在应用程序中使用的那些(并将值更改为您想要的值)。

您还可以使用jest.fn 工具来模拟模块的功能。