Jest - Тестирование на AWS лямбда - PullRequest
0 голосов
/ 19 июня 2020

Я пытаюсь использовать Jest с моей NodeJS основанной на AWS лямбда-функцией, чтобы проверить, что функция-обработчик Lambda возвращает определенные c коды состояния. Похоже, что использование лямбда-тестера - самый простой способ добиться этого.

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

I подумал, что это будет довольно просто, но в результате я получаю это:

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, я получаю Asyn c тайм-аут:

Тайм-аут - асинхронный c обратный вызов не был вызван в течение тайм-аута 5000 мс, указанного в jest.setTimeout.Timeout

Есть идеи, почему это не работает?

Лямбда должна немедленно выйти из строя, потому что передаваемое событие не имеет обязательного атрибута, и это действительно так при тестировании через Postman.

Изменить: Эта лямбда является частью бессерверного приложения и можно протестировать локально, как я могу использовать Jest для этого?

1 Ответ

0 голосов
/ 19 июня 2020

Я над этим подумал, ниже работает хорошо:

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)

});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...