首页 > 解决方案 > 在单元测试中使用 aws-sdk-mock 问题对 S3 getObject 进行单元测试

问题描述

我正在为 S3 getObject 编写单元测试。我使用了 aws-sdk-mock,但是当我运行它时,我遇到了一个问题。

Error: the object {
  "error": "InvalidAccessKeyId: The AWS Access Key Id you provided does not exist in our records."
  "status": false
} was thrown, throw an Error :)

这是我正在编写的单元测试:

const { expect } = require( 'chai' );
const utils = require( './s3Utils' );
const AWS = require( 'aws-sdk' );
const awsMock = require( 'aws-sdk-mock' );
const fs = require( 'fs' );

awsMock.setSDKInstance( AWS );


describe( 'S3 Utils', () => {
  before(() => {
    const rootPath = process.cwd();
    awsMock.mock( 'S3', 'getObject', Buffer.from( fs.readFileSync( `${ rootPath }/file.js` )));
  });

  after(() => {
    awsMock.restore( 'S3' );
  });

  it( 'Get the object from S3', async () => {
    const result = await utils.getFilesFromS3( '/somepath' );
    expect( result ).to.have.ownProperty( 'status' );
  });
});

这是我正在为其编写单元测试的函数:

const { s3Handler, BUCKET } = require( './../../config/s3Config' );

exports.getFilesFromS3 =
( bucketPath, fileName = 'index.js', bucketName = BUCKET ) => new Promise(( resolve, reject ) => {
  try {
    const params = { Key: `${ bucketPath }/${ fileName }`, Bucket: bucketName };
    s3Handler.getObject( params, ( error, data ) => {
      if ( error ) {
        reject({ status: false, error });
      } else {
        if (( data !== undefined || data !== null ) && Object.prototype.hasOwnProperty.call( data, 'Body' )) {
          const contents = data.Body.toString( 'utf-8' );
          resolve({ status: true, contents });
        }
        reject({ status: false, error: `No body present ${ bucketPath }/${ fileName }` });
      }
    });
  } catch ( error ) {
    reject({ status: false, error });
  }
});

我在这里想念什么?

标签: node.jsunit-testingamazon-s3aws-sdk-mock

解决方案


这将起作用

    const getObjectStub = AWS.S3.prototype.getObject = Sinon.stub();
    getObjectStub.yields(null, {
    AcceptRanges: "bytes", 
    ContentLength: 3191, 
    ContentType: "image/jpeg", 
    Metadata: {
    }, 
    TagCount: 2, 
    VersionId: "null"
   }
);

推荐阅读