Last active
May 17, 2023 12:58
-
-
Save joerx/9ef0cb5b2c4252f3d5ff to your computer and use it in GitHub Desktop.
Mocking S3 in Node.js using Sinon
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
var Aws = require('aws-sdk'); | |
var sinon = require('sinon'); | |
// Only works for 'createBucket', 'update' and a few others since most API methods are generated dynamically | |
// upon instantiation. Very counterintuitive, thanks Amazon! | |
var createBucket = sinon.stub(Aws.S3.prototype, 'createBucket'); | |
createBucket.yields(null, 'Me create bucket'); | |
// For other methods, we can 'assign' the stubs to the proto, already defined function won't be overridden | |
var listBuckets = Aws.S3.prototype.listBuckets = sinon.stub(); | |
listBuckets.yields(null, 'Me list buckets'); | |
var s3 = new Aws.S3(); | |
s3.createBucket({Bucket: 'my-bucket'}, function(err, arg1) { | |
console.log(arg1); | |
}); | |
s3.listBuckets(function(err, arg1) { | |
console.log(arg1); | |
}); | |
console.log('Called #createBucket() ' + s3.createBucket.callCount + ' time(s)'); | |
console.log('Called #listBuckets() ' + s3.listBuckets.callCount + ' time(s)'); |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"name": "node-s3-stub", | |
"version": "0.0.0", | |
"description": "", | |
"main": "index.js", | |
"scripts": { | |
"test": "echo \"Error: no test specified\" && exit 1" | |
}, | |
"author": "", | |
"license": "BSD", | |
"dependencies": { | |
"sinon": "~1.14.1", | |
"aws-sdk": "~2.1.17" | |
} | |
} |
Nice. Great example. It works me for listObjectsV2 also. I think it will support all.
Hi, Can you please share you code for mocking listObjectsV2
?
Thank you @joerx 😄
thanks a lot
how to create such stub for s3.upload and how to restore them ?
const putObjectStub = AWS.S3.prototype.putObject = sinon.stub();
putObjectStub.yields(null, 'data');
const uplaodStub = (AWS.S3.prototype.upload= sinon.stub());
uplaod.yields(null, 'data');
Thanks
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Nice. Great example. It works me for listObjectsV2 also. I think it will support all.