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

如何正确mock Auth.currentSession()解决Jest测试编译报错问题

解决方案

错误原因

  • Auth.currentSession 是异步方法,返回值类型为 Promise<CognitoUserSession>,原代码直接返回普通会话对象,未用Promise包裹,不符合类型定义,因此触发TS2345编译错误。

修复方案

直接修改mock代码即可,推荐两种可用写法:

写法1:使用mockResolvedValue(更简洁,推荐)

mockResolvedValue会自动将传入的值包装为已resolve的Promise,匹配异步方法的返回类型:

// 按需导入类型用于断言
import { CognitoUserSession, CognitoAccessToken } from 'amazon-cognito-identity-js';

jest.spyOn(Auth, 'currentSession').mockResolvedValue({
  getAccessToken: () => ({
    getJwtToken: () => "Secret-Token"
  } as CognitoAccessToken),
  // 若业务代码用到其他会话方法(如getIdToken、getRefreshToken),可按需补全,未用到则无需添加
} as unknown as CognitoUserSession);

写法2:手动包裹Promise

如果习惯用mockReturnValue,可手动将会话对象用Promise.resolve包裹:

import { CognitoUserSession, CognitoAccessToken } from 'amazon-cognito-identity-js';

jest.spyOn(Auth, 'currentSession').mockReturnValue(Promise.resolve({
  getAccessToken: () => ({
    getJwtToken: () => "Secret-Token"
  } as CognitoAccessToken),
} as unknown as CognitoUserSession));

注意:如果测试仅用到getAccessToken().getJwtToken逻辑,不需要补全CognitoUserSession的所有属性,通过as unknown as 目标类型的双重断言即可跳过TS类型校验,不影响测试运行。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 10:39:01