使用@peculiar/webcrypto无法获取crypto.subtle的问题排查
问题:Node.js + Jest 中无法通过@peculiar/webcrypto 正确设置global.crypto.subtle
我正在使用@peculiar/webcrypto 1.5.0版本(Node.js v18.18.2),在Jest测试中需要用到crypto.subtle,于是在jest.setup.js中添加了以下代码:
const { Crypto } = require('@peculiar/webcrypto'); global.crypto = new Crypto(); console.log('>>>', global.crypto.subtle);
已知该库的TypeScript定义包含subtle模块,但打印结果显示crypto.subtle为undefined。
===== 07/09 更新 =====
问题并非出自@peculiar/webcrypto,根本问题是无法更新global.crypto,若有进展会同步。
针对无法更新global.crypto的可能解决方向:
- 确认Jest配置中setup文件的执行时机,确保它在测试代码前运行。在
jest.config.js中检查:module.exports = { setupFiles: ['./jest.setup.js'], // 若需要在测试框架初始化后执行,可改用setupFilesAfterEnv // setupFilesAfterEnv: ['./jest.setup.js'], }; - 改用
globalThis.crypto替换global.crypto,Node.js中globalThis是标准全局对象:const { Crypto } = require('@peculiar/webcrypto'); globalThis.crypto = new Crypto(); console.log('>>>', globalThis.crypto.subtle); - 先清除Jest可能内置的crypto模拟,再重新设置:
delete global.crypto; const { Crypto } = require('@peculiar/webcrypto'); global.crypto = new Crypto(); - 若项目支持ES模块,尝试用导入方式替代require:
import { Crypto } from '@peculiar/webcrypto'; globalThis.crypto = new Crypto();
内容的提问来源于stack exchange,提问作者Juneyoung Oh
相关产品推荐
相关产品推荐

