В настоящее время я пишу фрагмент кода, который просто загружает файл в корзину S3.Это безсерверный проект NodeJS, написанный на Typescript.Для тестирования я использую Mocha, Chai и пытаюсь использовать SinonJS.
У меня есть класс с методом, который загружает буфер в виде файла на S3:
import { S3 } from "aws-sdk"
import { S3UploadError } from "../errors/S3UploadError"
/**
* This class provides a means of interacting with S3
*
* @export
* @class AWSS3Manager
*/
export class AWSS3Manager {
/**
* Instance of S3
*
* @private
* @type {S3}
* @memberof AWSS3Manager
*/
private s3: S3
/**
* Creates an instance of AWSS3Manager.
*
* @memberof AWSS3Manager
*/
public constructor() {
this.s3 = new S3()
}
/**
* Upload a file to bucket on S3 by using a buffer
*
* @param {Buffer} body
* @param {string} bucketName
* @param {string} fileName
* @returns {Promise<PromiseResult<S3.PutObjectOutput, S3UploadError>>}
* @memberof AWSS3Manager
*/
public async upload(body: Buffer, bucketName: string, fileName: string) {
const params = {
Body: body,
Bucket: bucketName,
Key: fileName,
}
try {
return await this.s3.putObject(params).promise()
} catch (err) {
console.log(err)
throw new S3UploadError()
}
}
}
Я даже не уверен, что это правильно, но яхочу проверить метод upload
вышеприведенного класса.И, на мой взгляд, для этого мне нужно смоделировать ответ от S3.putObject
, чтобы убедиться, что внешняя библиотека не вызывает помех.Однако, что бы я ни пытался, я не могу заставить его работать.
Я попытался заглушить метод объекта S3
put, но безрезультатно:
chai.should()
const assert = chai.assert
const expect = chai.expect
const s3manager = new AWSS3Manager()
let sandbox: sinon.SinonSandbox
let spy
describe("AWSS3Manager behaves as expected", () => {
beforeEach(() => {
sandbox = sinon.createSandbox()
spy = sinon.spy()
})
afterEach(() => {
// Restore the default sandbox here
sandbox.restore()
})
it("Uploads a file correctly to S3", async () => {
const putObjectStub = sinon.stub(S3.prototype, "putObject")
putObjectStub.yields("ERROR", 'data')
//const uploadStub = sandbox.stub(s3manager, "upload").resolves("Yup")
//sandbox.stub(AWS, "S3").resolves('HEYY')
const test = await s3manager.upload(new Buffer("ddds"), "TestBucket", "Test")
assert(putObjectStub.called)
})
})
Я попытался заглушить метод S3, а также метод загрузки самого себя и увидетьсколько звонков было, чтобы поставить объект, но я не могу заставить ничего работать.
Кто-нибудь может помочь?