TypeScript中使用Sinon Stub jsonwebtoken的verify函数报错问题
问题原因与解决方案
错误原因
jsonwebtoken的verify函数包含多个重载签名,其中带回调参数的异步版本返回值为void。Sinon在自动推断类型时优先匹配了这个异步重载,导致stub.returns()被约束为只能接受void类型参数,而你传入的"valid"是string类型,因此触发类型不匹配错误。
解决方案
通过明确指定Sinon Stub的泛型参数,强制匹配verify的同步版本签名(返回string | jwt.JwtPayload),即可解决类型错误:
import sinon from 'sinon'; import jwt from 'jsonwebtoken'; // 泛型参数依次为:[参数列表类型], 返回值类型 const stub = sinon.stub< [string, string | jwt.Secret, jwt.VerifyOptions?], string | jwt.JwtPayload >(jwt, "verify"); stub.returns("valid"); // 类型匹配,不再报错
如果你的业务代码实际使用的是verify的异步回调版本,可以改用stub.callsFake()模拟回调逻辑:
const stub = sinon.stub(jwt, "verify"); stub.callsFake((token, secret, options, callback) => { callback(null, "valid"); });
内容的提问来源于stack exchange,提问作者Juan Pablo Alvarez Ovalle
相关产品推荐
相关产品推荐

