使用Jest设置ReactNative的NativeModules.RNDeviceInfo

时间:2017-04-25 11:41:06

标签: reactjs react-native jestjs

我正在尝试将我的反应原生应用程序从使用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上设置值的正确方法是什么?

3 个答案:

答案 0 :(得分:4)

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

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

我只是嘲笑了getVersion方法并返回了一个随机数,因为那是你失败的那个,但是你可能不得不在你的应用程序中添加你正在使用的那个(并且更改了价值到你想要的那个。)

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

答案 1 :(得分:2)

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);

答案 2 :(得分:-1)

我没有太多反应自己的经验,但我确实有一个朋友。我向他提到这个,他说你应该重新启动打包机。你可以先做到这一点:

退出终端窗口

终止打包程序

然后

手动开头:

$ react-native start

我希望这会有所帮助!