amazon-web-services - 具有自定义授权方的无服务器 lambda 单元测试处理程

我的无服务器 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);
            }

        });
    });


});

最佳答案

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

我在这里尝试通过模拟 auth0 jsonwebtoken 提供的 jwks 库来单独测试授权方。如果授权方测试成功,那么您可以单独测试您的 protected 端点或生成一个 jwt token ,并根据我提供的代码生成策略,如果返回允许策略,则测试您的 protected 端点

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

关于amazon-web-services - 具有自定义授权方的无服务器 lambda 单元测试处理程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63752542/

相关文章:

reactjs - Jest 测试因 gatsby webpack 配置而抛出错误

python - 如何找到 DataFrame 行的所有组合?

sql-server - T-SQL Json_modify 将属性附加到每个对象

api - Google Scripts 应用程序和 Plaid 链接身份验证

apache-spark - 有什么方法可以使用 spark 从 s3 并行读取多个 Parquet

c - 尝试将 'insert' 或 'add' 写入文本文件 - 一个小问题

python - Pygame 全屏放大

python - 未处理的异常 : Connection closed while receivin

ios - 使用共享的 iOS Keychain 启用跨应用程序 Firebase 身份验证

r - “Enter”键不会与 splashR::splash_send_key 一起发送