Насмешливое обещание от DynamoDB Documentclient - PullRequest
2 голосов
/ 15 марта 2019

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

getStatusForPromiseID = async (promiseId, docClient) => {
    let data = await getStatusfromDB(promiseId, docClient);
    console.log("data.Items =========>", data.Items);
    return {
        "promiseId": data.Items[0].event_id,
        "status": data.Items[0].STATUS,
        "errors":data.Items[0].ERRORS
    }

}

function getStatusfromDB(promiseId, docClient) {
    console.log("In getActiveTokenFromDB " + promiseId);

    var params = {
        TableName: 'epayments-nonprod-transactions',
        KeyConditionExpression: 'event_id = :event_id',
        ExpressionAttributeValues: {
            ':event_id': promiseId
        }
    };

    return docClient.query(params).promise();

}

Я бы хотел сделать макет docClient.query (params) .promise ()

Вот как выглядит мой текущий тест, он запускаетсяно когда я отлаживаю, он говорит, что PromiseStatus resObj отклонен.Я хотел бы сделать это, чтобы иметь значения в данных. Элементы для утверждения.

describe('App function tests', ()=>{


    test('getStatusForPromiseID', ()=>{

        let docClient = new aws.DynamoDB.DocumentClient()
        docClient.query.promise = jest.fn()
        docClient.query.promise.mockImplementation(cb =>{
            cb(true, {Items: [1,2,3]})
        })


        let resObj = getStatusForPromiseID('11011', docClient)
        expect(docSpy).toHaveBeenCalled()

    })
})

1 Ответ

1 голос
/ 15 марта 2019

Вы можете использовать aws-sdk-mock , чтобы смоделировать DynamoDB DocumentClient с пользовательским ответом.

Чтобы смоделировать успешный ответ, вы можете сделать:

AWS.mock('DynamoDB.DocumentClient', 'query', function(params, callback) {
  callback(null, {Items: [1, 2, 3]});
});

А чтобы высказать ошибку, вы можете просто сделать:

AWS.mock('DynamoDB.DocumentClient', 'query', function(params, callback) {
  callback(new Error("Your error"));
});

Имейте в виду, что aws-sdk-mock автоматически выдаст ошибку, если вы укажете неверные параметры, что является изящной функцией.

Это будет работать, даже если вы вызовете .promise () при вызове SDK

В соответствии с комментарием, для насмешки над сервисом, когда он передается в функцию:

var AWS = require("aws-sdk");
var AWS_mock = require("aws-sdk-mock");

describe('App function tests', ()=>{
  test('getStatusForPromiseID', ()=>{
    AWS_mock.mock('DynamoDB.DocumentClient', 'query', function(params, callback) {
      callback(null, {Items: [1, 2, 3]});
    });

    let docClient = new AWS.DynamoDB.DocumentClient();

    return getStatusForPromiseID('11011', docClient)
      .then(result => {
            expect(result).to.equal({Items: [1, 2, 3]});
        });
  })
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...