我们为团队使用制作了一个 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
与它有什么关系还是独立的?
当您运行测试时,我怀疑您正在 Node.js 中运行的测试环境中运行它。
crypto.getRandomValues
仅可通过 Web API 获取。它不存在于 crypto
下的 Node 中,请参阅关于 crypto
的 Node 文档。 Node 确实提供了一个 web crypto API,它具有 getRandomValues
,但 uuid
库不会意识到它。
您可以自己模拟或填充
crypto.getRandomValues
,请参阅:如何使用 Jest 来使用 crypto 或 window.msCrypto 测试函数。
遇到了同样的问题,并且能够使用 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);
}