我的无服务器lambda应用程序具有自定义授权器
verify-token:
handler: app/Middleware/VerifyToken.auth
user:
handler: app/Handlers/Users.user
events:
- http:
path: user
method: get
cors: true
authorizer: verify-token
我正在为用户处理程序编写jest单元测试,但由于在部署时自定义授权是在执行用户处理程序之前运行的,因此如何在jest单元测试中应用相同的功能,以便在运行用户处理程序测试之前应用授权?
这是我的考验
const { user } = require('../../app/Handlers/Users');
/**
* Tests for get()
*/
describe('Get user', () => {
it('Get user data', async done => {
let userEvent = {
headers: {
'authorization': 'Bearer TOKEN'
}
}
// user.authorizer();
user(userEvent, null, (error, data) => {
try {
expect(data.statusCode).toBe(200);
done();
} catch (error) {
done(error);
}
});
});
});
2条答案
按热度按时间avkwfej41#
我尝试使用mock-jws library,它对我很有效。
这里我尝试通过模拟auth0 jsonwebtoken提供的jwks库来单独测试授权者。如果授权者测试成功,则您可以单独测试受保护端点或生成jwt令牌,并从我提供的代码生成策略,如果返回允许策略,则测试受保护端点
omtl5h9j2#
serverless.yml
中的authorizer键基本上告诉API Gateway对于特定的API端点使用什么授权器函数,授权器仅在您通过API部署和调用lambda时使用,您不能真正在本地测试此流程,即通过单元测试。您不必测试您的函数沿着授权者,如果您的授权者将操纵事件,比如提取JWT,您应该在测试中mock这些流程,并将处理后的事件传递给目标函数。
如果你想测试autoirzer,你应该为它写一个单独的测试。