【发布时间】:2021-02-04 20:43:49
【问题描述】:
我尝试用玩笑来模拟 npm 模块 jsonwebtoken 的验证功能。该函数返回一个解码的令牌,但我想将此函数的自定义返回传递给我的单元测试。
在继续请求之前,我提出了检查访问令牌有效性的明确请求。但我想模拟令牌检查的时刻以直接返回用户值。并轻松通过这一步。我把代码的关注部分放在了你的位置上。
但是打字稿给我发了这个错误: 类型'{(令牌:字符串,secretOrPublicKey:秘密,选项?:验证选项|未定义)上不存在属性'mockReturnValue':字符串|目的; (token: string, secretOrPublicKey: string | Buffer | { key: string | Buffer; passphrase: string; } | GetPublicKeyOrSecret, callback?: VerifyCallback | undefined): void; (令牌:字符串,secretOrPublicKey:字符串| ... ...'。
所以模拟不起作用,我不明白。我遵循 Jest.io 上的模拟 axios 步骤,但它似乎不适用于 jsonwebtoken。
大家知道问题出在哪里,或者如何在玩笑时模拟这个 jsonwebtoken 模块吗?
users.test.ts
import jwt from 'jsonwebtoken'
jest.mock('jwt')
jwt.verify.mockReturnValue({
userId: String(member._id),
email: String(member.email),
permissionLevel: member.permissionLevel,
username: String(member.username),
})
describe('### /GET users', () => {
it('it should return 200 (Users List)', async (done) => {
const res = await request(app).set('Authorization', 'Bearer').get('/users')
expect(res.status).toBe(200)
})
})
验证.ts
public isAccessTokenValid = (req: Request, res: Response, next: NextFunction): void => {
if (req.cryptedAccessToken) {
try {
req.accessToken = jwt.verify(req.cryptedAccessToken, ACCESS_TOKEN_SECRET)
next()
} catch (err) {
res.status(498).send({ error: err.message })
}
} else res.status(401).send({ error: 'cryptedAccessToken field not present in request' })
}
最好的问候
【问题讨论】:
标签: node.js testing jestjs mocking jwt