aws-sdk-mock
aws-sdk-mock copied to clipboard
Getting 'ExpiredToken: The provided token has expired.' when trying to mock S3.listObjects
Here is the module I want to test
'use strict';
var AWS = require('aws-sdk');
var async = require('async');
var s3 = new AWS.S3();
const BUCKET_NAME = process.env.BUCKET_NAME;
var workletData = {};
exports.workletData = workletData;
exports.loadWorkletData = loadWorkletData;
function loadWorkletData() {
async.waterfall([
function getBucketItemList(callback) {
var params = {
Bucket: BUCKET_NAME
};
s3.listObjects(params, function(err, data) {
if (err) {
callback(err, null);
} else {
var bucketContent = data.Contents;
callback(null, bucketContent);
}
});
},
function getBucketObjectDetails(bucketContent, callback) {
async.forEach(bucketContent, function(item, callback) {
var params = {
Bucket: BUCKET_NAME,
Key: item.Key
};
s3.getObject(params, function(err, data) {
if (err) {
return callback(err);
} else {
var fileContent = data.Body.toString();
var json = JSON.parse(fileContent);
workletData[json.name] = json;
callback();
}
});
}, function(err, data) {
if (err) {
console.log(err);
callback(err);
} else {
callback();
}
});
}
],
function(err, result) {
if (err) {
throw err;
} else {
console.log('Worklet data loaded.');
}
});
};
this is the test
describe('workletLoader', function () {
it('should invoke a lambda function', function(done) {
before(function() {
AWS.mock('S3', 'listObjectsV2', function (params, callback) {
callback(null, 'listObjects');
});
AWS.mock('S3', 'getObject', function (params, callback) {
callback(null, 'getObject');
});
});
after(function(){
AWS.restore('S3', 'listObjectsV2');
AWS.restore('S3', 'getObject');
});
workletLoader.loadWorkletData(function(err, data) {
should.not.exist(err);
done();
});
});
});
I am getting ExpiredToken: The provided token has expired.
Looks like the methods are not properly mocked. Any suggestions>?
@nguyeti could you try to move this line of code var s3 = new AWS.S3(); into your loadWorkletData function and see what the result is?