为在 javascript 中使用 jwt 令牌的方法编写单元测试
Posted
技术标签:
【中文标题】为在 javascript 中使用 jwt 令牌的方法编写单元测试【英文标题】:Writing unit tests for method that uses jwt token in javascript 【发布时间】:2018-07-29 10:34:00 【问题描述】:我一直在尝试在 javascript 中为使用 jwt 令牌验证的方法编写单元测试。因此,只有在令牌有效时才会获取结果。
我想模拟 jwt 令牌并返回结果。有什么办法吗?我尝试使用 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.
【问题讨论】:
您介意提供一些您实际尝试执行此操作的代码吗?还有最后出了什么问题。所以我们可以修复并帮助您。 【参考方案1】:模块是 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 中使用 jwt 令牌的方法编写单元测试的主要内容,如果未能解决你的问题,请参考以下文章
ADAL使用AcquireTokenAsync和现有JWT令牌续订令牌
由于 JWT 令牌较大,超出了 Javascript 设置的 cookie 最大大小
是否可以在 Php 中加密 JWT 令牌并在 Javascript 中解密?
如何在前端的 Javascript Ajax API 调用中隐藏我的 JWT 令牌?
使用 Http 和 Secure 将 Jwt 令牌存储在 Cookie 中,而不是 Javascript 中的 LocalStorage