React.js 不支持 crypto.getRandomValues()

问题描述 投票:0回答:2

我们为团队使用制作了一个 npm 包,在其中我们正在使用这个

uuidjs
。现在我已经在我的 Create-React-App 上安装了这个自定义 npm 包,正在使用
testing-library
进行测试。

当我测试从具有

uuidjs
的自定义包导入文件的组件时,我收到以下错误:

crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported

我知道这个问题有答案是

install react-native-get-random-values
。但我的困惑是我可以在使用 React.js 的 CRA 中安装它吗?
react-native
与它有什么关系还是独立的?

reactjs uuid react-testing-library avalara
2个回答
4
投票

问题

当您运行测试时,我怀疑您正在 Node.js 中运行的测试环境中运行它。

crypto.getRandomValues
仅可通过 Web API 获取。它不存在于
crypto
下的 Node 中,请参阅关于 crypto
 的 Node 
文档。 Node 确实提供了一个 web crypto API,它具有
getRandomValues
,但
uuid
库不会意识到它。

解决方案

您可以自己模拟或填充

crypto.getRandomValues
,请参阅:如何使用 Jest 来使用 crypto 或 window.msCrypto 测试函数


0
投票

遇到了同样的问题,并且能够使用 Polyfills 解决。

将以下配置添加到jest.config.ts

...
setupFiles: ['./jest.polyfills.ts'],
setupFilesAfterEnv: ['<rootDir>/src/setup-tests.ts'],
...

jest.polyfills.ts 文件添加到项目根目录。

if (typeof global.crypto !== 'object') {
    global.crypto = crypto;
}

if (typeof global.crypto.getRandomValues !== 'function') {
    global.crypto.getRandomValues = getRandomValues;
}

function getRandomValues(array) {
    return crypto.webcrypto.getRandomValues(array);
}
© www.soinside.com 2019 - 2024. All rights reserved.