如何正确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
相关产品推荐
相关产品推荐

