gpt4 book ai didi

javascript - 为在 javascript 中使用 jwt token 的方法编写单元测试

转载 作者:行者123 更新时间:2023-12-03 21:56:36 24 4
gpt4 key购买 nike

我一直在尝试用 javascript 为使用 jwt token 验证的方法编写单元测试。因此,仅当 token 有效时才会获取结果。

我想模拟 jwt token 并返回结果。有什么办法吗?我尝试使用 ava 测试框架、模拟 require、sinon,但我无法做到。

有什么想法吗 ?

代码:

I am trying to mock jwt.verify    

**unit test:**

const promiseFn = Promise.resolve({ success: 'Token is valid' });

mock('jsonwebtoken', {
verify: function () {
return promiseFn;
}
});

const jwt = require('jsonwebtoken');

const data = jwt.verify(testToken,'testSecret');

console.log(data)


**Error :**

ERROR
{"name":"JsonWebTokenError","message":"invalid token"}


So the issue here is that, its actually verifying the token but not invoking the mock.

最佳答案

模块是 Node.js 中的单例。因此,如果您在测试中需要“jwt”,然后在您的业务逻辑中需要它,它将是同一个对象。

因此,您几乎可以在测试中要求 'jwt' 模块,然后模拟 verify方法。

此外,重要的是不要忘记 restore测试完成后的模拟。

这是您想要完成的最小工作示例(使用 ava 和 sinon):

const test = require('ava');
const sinon = require('sinon');
const jwt = require('jsonwebtoken');

let stub;

test.before(t => {
stub = sinon.stub(jwt, 'verify').callsFake(() => {
return Promise.resolve({success: 'Token is valid'});
});
})

test('should return success', async t => {
const testToken = 'test';
const testSecret = 'test secret';

const result = await jwt.verify(testToken, testSecret);

console.log(result);

t.is(result.success, 'Token is valid');
});

test.after('cleanup', t => {
stub.restore();
})

关于javascript - 为在 javascript 中使用 jwt token 的方法编写单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48861967/

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