React native 错误:无法读取属性';getRandomBase64';运行测试文件时的未定义值

React native 错误:无法读取属性';getRandomBase64';运行测试文件时的未定义值,react-native,jestjs,React Native,Jestjs,我尝试使用包uuid和react native get random value来创建随机uuid。一切都很好,工作正常。但当我尝试使用jest运行测试文件时,出现了一个错误,无法读取undefined的属性“getRandomBase64”。 如何解决这个错误 谢谢 尝试在根应用程序中导入“反应本机获取随机值” import { AppRegistry } from 'react-native'; import App from './App'; import { name as appNam

我尝试使用包uuid和react native get random value来创建随机uuid。一切都很好,工作正常。但当我尝试使用jest运行测试文件时,出现了一个错误,无法读取undefined的属性“getRandomBase64”。 如何解决这个错误

谢谢


尝试在根应用程序中导入“反应本机获取随机值”

import { AppRegistry } from 'react-native';
import App from './App';
import { name as appName } from './app.json';
import '@react-native-firebase/crashlytics';
import 'react-native-get-random-values';
console.disableYellowBox = true
AppRegistry.registerComponent(appName, () => App);

这是链接问题

最后,我可以通过在package.json文件中的transform ignore模式中添加react native get random值和uuid来修复此错误,类似这样的内容

"transformIgnorePatterns": [
      "/node_modules/(?!native-base|@react-native-community/netinfo|@react-native-community/async-storage|@react-native-community/geolocation|react-native-permissions|uuid|react-native-get-random-values)/"
    ]

react native get random value是一个本机模块,因此在运行单元测试时需要模拟它

一种方法如下:转到您的
\uuuu mocks\uuuu
文件夹(或者在项目的根目录中创建它,如果它不在那里),然后放置一个名为
react native get random values.js的文件(名称很重要),其中包含以下内容:

export default {
  getRandomBase64: jest.fn().mockImplementation(() => {
    console.log("getRandomBase64 mock called");
    return "mockedBase64";
  })
};

要了解有关模拟整个模块的更多信息,请阅读

我遇到了相同的问题,但上面的回答对我都不起作用

在我的测试文件顶部添加此模拟解决了以下问题:

jest.mock('react-native-get-random-values', () => ({
  getRandomBase64: jest.fn(),
}));
aav7fl在上找到的解决方案


我知道这个问题已经问了5个月了,但它可能会帮助其他人。

谢谢你的解决方案,但它仍然是错误的。运行测试文件时出现此错误。同一错误bro,“无法读取未定义的属性'getRandomBase64'”您的版本是什么?获取随机值?谢谢bro,但您的解决方案仍然无效。好的是,我可以通过在package.json文件中添加react native get random值和转换忽略模式内的uuid来修复该错误。“transformIgnorePatterns”:[“/node_modules/(?!native base |@react native community/netinfo |@react native community/async storage |@react native community/geolocation | react native permissions | uuid | react native get random value)/”]如果在正常运行应用程序时出现问题,那么这就是解决方案。但是,如果在运行测试时出现问题,我会按照martom在其回答中的建议,使用项目根目录中的_mocks文件夹进行模拟来解决问题。我没有通过此解决我的问题。很高兴它对你有用。它应该做什么?是否允许传输未随传输源发布的3d party模块?也就是说,它不是在js中发布的,而是作为ts发布的?然而,我看到uuid和react native get random值都发布为js(只需查看我的node_modules文件夹)。如果你能澄清这是什么,那就太好了。@Tejpbit请看一下我上面的答案,这应该是这个问题的解决方案。是的。非常感谢。我应该澄清一下。当我看到这不起作用时,我确实同意了你的解决方案。这对我没有帮助。