gpt4 book ai didi

node.js - 如何在 Jest 中模拟重载方法?

转载 作者:行者123 更新时间:2023-12-04 13:36:17 26 4
gpt4 key购买 nike

我正在使用 jsonwebtoken 库来验证我的模块中的 token 。 jsonwebtoken 多次导出验证方法(重载)。

export function verify(token: string, secretOrPublicKey: Secret, options?: VerifyOptions): object | string;

export function verify(
token: string,
secretOrPublicKey: Secret | GetPublicKeyOrSecret,
callback?: VerifyCallback,
): void;

export function verify(
token: string,
secretOrPublicKey: Secret | GetPublicKeyOrSecret,
options?: VerifyOptions,
callback?: VerifyCallback,
): void;


我的模块:
private validateToken(token: string): void {
const publicKeyToPem = this.convertPublicKeyToPEM(this.ssoPublicKey);
try {
this.decodedToken = jwt.verify(token, publicKeyToPem);
} catch (e) {
throw new Error(e);
}
}

我试图在单元测试中模拟验证方法。
    test('should return true if token is correct', () => {

const verifyResponse = { 'test': 'test' };
jest.spyOn(jwt, 'verify').mockReturnValue(verifyResponse);

........
});

我收到以下错误: '{ test: string; 类型的参数; }' 不可分配给类型为 'void'.ts(2345) 的参数
似乎使用了最后导出的方法(验证)并且它返回无效。
我试过 jest.spyOn(jwt, 'verify').mockImplementationOnce(() => verifyResponse);似乎没问题,但如何模拟特定的重载方法?

最佳答案

而不是 jest.spyOn你应该使用 jest.mock像这样

const jwt = require('jwt-library');
const myMod = require('./myModule');

// it will replace all of the methods with jest.fn()
jest.mock('jwt-library')

describe('my module', () => {
const mockDecodedToken = { 'test': 'test' };
describe('calling a public method that calls validateToken', () => {
beforeAll(() => {
jwt.verify.mockReturnValue(mockDecodedToken);
myMod.aPublicMethodThatCallsValidateToken()
})

it('should have called jwt.verify', () => {
expect(jwt.verify).toHaveBeenCalledWith(
expect.any(String)
expect.any(Secret)
expect.any(VerifyOptions)
)
})

it('should have assigned decodedToken to my module', () => {
expect(myMod).toHaveProperty(decodedToken, mockDecodedToken)
});
})
})

关于node.js - 如何在 Jest 中模拟重载方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61752367/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com