Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript aws sdk模拟模拟s3.putBucketPolicy不起作用_Javascript_Amazon S3_Jestjs_Aws Sdk Mock - Fatal编程技术网

Javascript aws sdk模拟模拟s3.putBucketPolicy不起作用

Javascript aws sdk模拟模拟s3.putBucketPolicy不起作用,javascript,amazon-s3,jestjs,aws-sdk-mock,Javascript,Amazon S3,Jestjs,Aws Sdk Mock,我想测试这个函数 async function PutBucketPolicy(putBucketPolicyParams) { logger.debug("---- PutBucketPolicy"); return new Promise(async(resolve, reject) => { s3.putBucketPolicy(putBucketPolicyParams, function(err, data) { if (err) {

我想测试这个函数

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:提供的令牌已过期。],因为模拟本身不起作用,它试图离开internet并执行s3.putBucketPolicy函数


我是新来的。我应该怎么做才能让它工作?

您需要在要测试的方法中初始化S3客户端,如中所述

注意:AWS服务需要在正在运行的函数内初始化 测试以模拟SDK方法,例如针对AWS Lambda 函数示例1将导致配置中未定义错误区域 而在示例2中,sdk将被成功模拟

例1:

例2

还要注意,如果您初始化 AWS服务位于从 处理程序函数,这也不起作用


我已经将其添加到函数中:consts3=newaws.s3({apiVersion:'2006-03-01'});并将其放入测试函数:consts3=newaws.s3({paramValidation:true});现在它开始工作了。谢谢
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
}
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
}