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

如何用Jest正确模拟aws-jwt-verify的CognitoJwtVerifier?

问题分析与解决

你遇到的错误核心是:create是CognitoJwtVerifier的静态方法,不是实例方法,但你之前的模拟代码错误地把create挂载到了CognitoJwtVerifier的实例上,而不是直接挂载到CognitoJwtVerifier本身。

原代码里你是直接调用CognitoJwtVerifier.create(),这说明create是属于CognitoJwtVerifier这个导出对象的静态方法,不需要先实例化CognitoJwtVerifier。

正确的Jest模拟代码

你需要把create直接挂载到CognitoJwtVerifier这个模拟对象上,而不是模拟它的构造函数返回带create的实例:

const oauthMock = jest.fn();

jest.mock('aws-jwt-verify', () => ({
  __esModule: true,
  CognitoJwtVerifier: {
    create: () => oauthMock
  }
}));

如果你的业务代码里还会调用verifier.verify()这类实例方法,可以进一步模拟create返回带对应方法的对象:

const mockVerify = jest.fn().mockResolvedValue({ /* 模拟验证成功后的返回值,比如用户信息等 */ });
const mockVerifier = { verify: mockVerify };

jest.mock('aws-jwt-verify', () => ({
  __esModule: true,
  CognitoJwtVerifier: {
    create: jest.fn(() => mockVerifier)
  }
}));

为什么之前的代码错误?

  • 第一次模拟:你把CognitoJwtVerifier模拟成了构造函数(jest.fn().mockImplementation(...)),调用它的create需要先new CognitoJwtVerifier(),但原代码根本没有实例化步骤,直接调用静态方法,所以报错。
  • 第二次模拟:同样错误地把CognitoJwtVerifier当成构造函数,返回的实例带create,但原代码是直接调用CognitoJwtVerifier.create,自然找不到这个方法。

内容的提问来源于stack exchange,提问作者bramasta vikana

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 00:55:17