【问题标题】:Serverless lambda unit test handlers with custom authorizer具有自定义授权器的无服务器 lambda 单元测试处理程序
【发布时间】:2020-12-24 09:32:52
【问题描述】:

我的无服务器 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 单元测试中应用相同的内容,以便在运行用户处理程序测试之前应用授权?

这是我的测试

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);
            }

        });
    });


});

【问题讨论】:

  • 我认为您不应该在单元测试中包含授权。自定义授权者是另一个允许或拒绝访问实际处理程序的 lambda 函数。在您的测试中,您直接调用处理程序,因此您已通过身份验证步骤。
  • 你找到解决办法了吗?
  • 没有@JatinMehrotra
  • 发布了一个对我有用的解决方案

标签: amazon-web-services aws-lambda jestjs serverless


【解决方案1】:

我尝试使用mock-jws library,它对我有用。

这里我试图通过模拟 auth0 jsonwebtoken 提供的 jwks 库来单独测试授权者。如果授权人测试成功,那么您可以单独测试您的受保护端点或生成一个 jwt 令牌,并从我提供的代码中生成一个策略,如果返回允许策略,则测试您的受保护端点

const createJWKSMock = require('mock-jwks');
const authorizer = require('../authorizer/authorizer');

describe('Auth Test', () => {
  const jwks = createJWKSMock.default('https://your domain here');

  beforeEach(() => {
    jwks.start();
  });

  afterEach(() => {
    jwks.stop();
  });
  test('should verify the token', async () => {
    const token = jwks.token({
      aud: 'https://your audience,
      iss: 'https://issuer of token',
    });
    console.log(token);
    const event = {
      authorizationToken: `Bearer ${token}`,
    };
    const policy = await authorizer.auth(event, 'context');
    console.log('jatin', policy);
    expect(policy.context).not.toBe(undefined);
  });

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-03-13
    • 2022-07-30
    • 2020-05-28
    • 1970-01-01
    • 1970-01-01
    • 2020-03-16
    • 1970-01-01
    • 2019-12-15
    相关资源
    最近更新 更多