Тестирование асинхронного SQS sendMessage

Все сводится к нормализации в сравнении с простотой использования и проблемами производительности.

Если вы собираетесь придерживаться полных правил нормализации, вы закончите писать материал, который выглядит так:

Выберите c.id, c.lastname, ....... от клиента c левым join customerphonenumber cpn на c.id = cpn.customerid left join customeraddress ca на c.id = ca.customerid left join customerphonenumber2 cpn2 на c.id = cpn2.customerid и т. д. и т. д. и т. д.

1
задан Jeremy Harris 19 January 2019 в 05:07
поделиться

1 ответ

Я не использовал aws-sdk-mock, но, видимо, в вашем макете вы используете обратный вызов, а в лямбда-обработчике это асинхронный вызов. Я использую proxyquire для пересмешивания зависимостей. Вот пример:

functionHandler.js

Не нужно использовать callback и context во время выполнения лямбды Node8.10.

let AWSSQS = require('aws-sdk/clients/sqs');
let sqs = new AWSSQS();

exports.functionHandler = async (event) => {

  // No need to use callback when Lambda runtime is 8.10.
  try {

    let parsedBody = JSON.parse(event.Records[0].body);
    let modifiedBody = await doStuff(parsedBody);

    let sqsPayload = {
      MessageBody: JSON.stringify(modifiedBody),
      QueueUrl: my-queue-url
    };

    await sqs.sendMessage(sqsPayload).promise();

    return utils.respondSuccess('Done');
  } catch (err) {
    throw utils.respondError(err);
  }
};

test.spec.js

В значительной степени говорят сами за себя. Вы определяете объект с именем зависимости как свойство.

const proxyquire = require('proxyquire');

let app = require('path/to/function');

describe('SQS', () => {

  it("an awesome title for my test", async (done) => {

    const app = proxyquire(app, {
      'aws-sdk/clients/sqs': function() {
        this.sendMessage = (params) => {
          return {
            promise: () => {
              return Promise.resolve({
                ResponseMetadata: {
                  RequestId: 'test-request-id'
                },
                MD5OfMessageBody: 'a892e8d8589e97ca92fb70020f01c16c',
                MessageId: 'test-message-id'
              });
            }
          }
        }
      }
    });

    let payload = {
      Records: [
        // Data here
      ]
    };

    const data = await app.functionHandler(payload);
    let parsedBody = JSON.parse(data.body);
    expect(parsedBody.message).to.be.equal("Done");
    done();
  });
});
0
ответ дан A.Khan 19 January 2019 в 05:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: