You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用@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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 02:55:54