aws -sdk-mock насмешка над s3.putBucketPolicy не работает - PullRequest
0 голосов
/ 24 марта 2020

У меня есть эта функция, которую я хочу протестировать.

async function PutBucketPolicy(putBucketPolicyParams) {
  logger.debug("---- PutBucketPolicy");
  return new Promise(async(resolve, reject) => {

    s3.putBucketPolicy(putBucketPolicyParams, function(err, data) {
      if (err)
      {
        resolve(err);
        logger.debug("Error occured!");
        logger.debug(err, err.stack); // an error occurred
      }
      else
      {
        resolve(data);
        logger.debug("Data: ", data);
        logger.debug(data); // successful response
      }
    });
  });
}

Как я хочу ее протестировать:

describe("Testing PutBucketPolicy function", () => {
  describe("when called with a valid bucket policy object and an event then it", () => {
    it("sets the bucket policy through an aws call.", async() => {

      AWSMock.mock("S3","putBucketPolicy",{ "Body": Buffer.from("somestring") });

      const result = await PutBucketPolicy(helper.putBucketPolicyParams);
      expect( result).toMatchObject(helper.resultPolicyObject);

      AWSMock.restore('S3');

    });
  });
});

Проблема в том, что она всегда возвращает [ ExpiredToken: срок действия предоставленного токена истек.] , поскольку само mocking не будет работать, и оно пытается go вывести inte rnet и выполнить функцию s3.putBucketPolicy.

Я новичок к этому. Что я должен сделать, чтобы это работало?

1 Ответ

1 голос
/ 24 марта 2020

Вам необходимо инициализировать клиента S3 внутри метода для тестирования, как указано в do c.

Примечание: служба AWS должна быть инициализируется внутри тестируемой функции для того, чтобы метод SDK был смоделирован, например, для AWS лямбда-функции, пример 1 приведет к области ошибки, не определенной в config, тогда как в примере 2 sdk будет успешно смоделирован.

Пример 1:

const AWS      = require('aws-sdk');
const sns      = AWS.SNS();
const dynamoDb = AWS.DynamoDB();

exports.handler = function(event, context) {
  // do something with the services e.g. sns.publish
}

Пример 2

const AWS = require('aws-sdk');

exports.handler = function(event, context) {
  const sns      = AWS.SNS();
  const dynamoDb = AWS.DynamoDB();
  // do something with the services e.g. sns.publish
}

Также обратите внимание, что если вы инициализируете службу AWS внутри обратного вызова из asyn c функции внутри функции-обработчика, это тоже не сработает.

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