【问题标题】:Jest - Testing for AWS LambdaJest - AWS Lambda 测试
【发布时间】:2020-06-19 06:25:42
【问题描述】:

我正在尝试将 Jest 与基于 NodeJS 的 AWS Lambda 函数一起使用,以测试 Lambda 处理程序函数是否返回特定状态代码。似乎使用lambda-tester 是实现这一目标的最简单方法。

handler.test.js

const handler = require('../src/handler.js');
const LambdaTester = require('lambda-tester');

test('should return a StatusCode of 400 due to requirement not being met', function (done) {
  return LambdaTester(handler.run)
    .event({})
    .expectResult(result => {
      expect(result.statusCode).toBe(400);
    });
});

我认为这很简单,但结果我得到了这个:

expect(received).toBe(expected) // Object.is equality

Expected: 400
Received: 500

   7 |     .event({})
   8 |     .expectResult(result => {
>  9 |       expect(result.statusCode).toBe(400);
     |                                 ^
  10 |     });
  11 | });
  12 | 

  at tests/handler.test.js:9:33
  at runVerifier (node_modules/lambda-tester/lib/runner.js:121:16)
  at LambdaRunner.run (node_modules/lambda-tester/lib/runner.js:277:23)

如果我更改期望行以检查状态码 500,我会收到异步超时:

超时 - 在 5000 毫秒超时内未调用异步回调 由 jest.setTimeout.Timeout 指定

关于为什么这不起作用的任何想法?

lambda 应该立即失败,因为传入的事件没有必需的属性,并且在通过 Postman 测试时确实如此。

编辑: 这个 lambda 是无服务器应用程序的一部分,可以在本地进行测试,我如何使用 Jest 来做到这一点?

【问题讨论】:

  • 1) 你试过await吗? 2)您真的需要在 aws 环境中对其进行测试(例如:您的 lambda 依赖于其他 lambda 才能工作)还是您可以抽象功能以在本地测试它?

标签: javascript amazon-web-services jestjs


【解决方案1】:

我想多了,下面的效果很好:

test('should return a StatusCode of 400 due to requirement not being met', async () => {

  const event = {};
  const context = {};

  const result = await handler.run(event, context);
  expect(result.statusCode).toBe(400)
  expect(result.headers)

});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-04-04
    • 2020-10-02
    • 1970-01-01
    • 1970-01-01
    • 2018-04-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多