Как выполнить модульное тестирование AWS Lambda, используя lambda-local с mocha? - PullRequest
0 голосов
/ 24 мая 2019

Фон

Я работаю над проектом, который построен на Бессерверной инфраструктуре с serverless-appsync-plugin . Я реализовал одну конечную точку (AWS Lambda) для обработки всех запросов, генерируемых из Appsync через graphQL. Конечная точка направит запрос в соответствующую функцию для выполнения операции.

Задача

Теперь, когда я разработал около 10+ операций, я хочу автоматизировать процесс модульного тестирования. Для простоты я решил запустить эту единственную конечную точку в качестве лямбды локально для всего тестирования (против запуска appsync-offline).

Итак, я использовал лямбда-локальный с мокко . Тем не менее, я не могу получить тест-кейс для сбоя, основываясь на ответе, который я получил от лямбды.

it('db should have a user of uId: 123',  async function () {
  lambdaLocal.execute({
    event: makeUserEvent({userId: '123'}),
    callbackWaitsForEmptyEventLoop: false,
    lambdaPath,
    callback: function(err, data) {
      if(err) {
        console.log(1)
        expect.fail(null, null, 'You are not supposed to be here') //should fail here
      } else {
        console.log(2)
        // some checking here, may fail or may not fail
        expect.fail(null, null, 'return fail if the userId is 234') //should fail here too
      }
    }
  });
  console.log(3)
})

В обеих ситуациях я хочу, чтобы это не сработало, это не сбои тестовых случаев для callback('failed', null) или callback(null, 'success').

Итак, как правильно сделать лямбда-локальный код неудачным для теста?

1 Ответ

0 голосов
/ 27 мая 2019

В вашем коде тест завершается без мокко, регистрирующим, что утверждения в lambdaLocal.execute не выполнены.Таким образом, он всегда будет проходить.

Вместо использования параметра обратного вызова вы можете вернуть обещание или дождаться lambdalocal.execute и затем выполнить свои утверждения.

Например (используя обещания):

it('db should have a user of uId: 123',  function () {
  return lambdaLocal.execute({
    event: makeUserEvent({userId: '123'}),
    callbackWaitsForEmptyEventLoop: false,
    lambdaPath })
 .then(
    (data) => {
        console.log(2)
        // some checking here, may fail or may not fail
        expect.fail(null, null, 'return fail if the userId is 234') //should fail here
    },
    (err) => {
        console.log(1)
        expect.fail(null, null, 'You are not supposed to be here') //should fail here
    })
}

В качестве альтернативы измените сигнатуру функции, которая передается в it, чтобы получить дополнительный параметр (обычно называемый done), который затем будет использоваться mocha для передачи функции, которая может использоваться для сигнализациичто тест закончен.Для получения дополнительной информации см. Документацию mocha .

...