Разрешить обновление Динамо внутри лямбда-функции - PullRequest
0 голосов
/ 07 октября 2018

Я пытаюсь протестировать функциональность в моей лямбде, некоторые из этих функций делают вызовы в DynamoDB для обновления.Мне нужно это решить, чтобы мой тест не провалился.Я использую aws-sdk-mock.Я включу свой звонок в «Динамо» и мой тест.

//DB call
database.update(parameters).promise();

//test
it('respond with something', async () => {
    const response = await helper.handler(variable, async () => {
        AWS.mock('DynamoDB', 'update', Promise.resolve());
    });

    assert.equal(something, something);
});

Я пробовал разные варианты, но это всего лишь пример.

Ответы [ 3 ]

0 голосов
/ 08 октября 2018

Так что просто разобрался.Инициализация Dynamo должна быть в функции, которую вы тестируете, или она не может корректно издеваться.Итак, в моей функции у меня есть:

exports.handler = async (event) => {
AWS.config.update({region: aws.REGION});
const ddb = new AWS.DynamoDB.DocumentClient();

И затем в моем тесте у меня есть:

AWS.mock('DynamoDB.DocumentClient', 'update', Promise.resolve())

внутри моего теста.

0 голосов
/ 08 октября 2018

Вы также можете использовать sinon для заглушки любого function

Пример функции заглушки getDatabyId служб Db.

const chai = require('chai');
const sandbox = require('sinon').createSandbox();
const expect = chai.expect;
const dbService = require('../util/models/dbService').dbService;
const BPromise = require('bluebird');

 it('Should return success', function (done) {
    sandbox.stub(dbService, 'getDatabyId').returns(BPromise.resolve());
    .....
  });
0 голосов
/ 07 октября 2018

Я бы взглянул на использование DynamoDB Local вместо насмешливого DynamoDB.Вы получаете выгоду, зная, что ваши вызовы SDK действительны (поскольку DynamoDB Local проверяет запросы точно так же, как настоящая DynamoDB), и вам не нужно беспокоиться о сложностях с поддельными запросами с реалистично выглядящими ответами, которые могут не точно отражать то, как реальный DynamoDB будетответить.

...