在使用mocha的测试期间,我遇到了S3.getObject()的调用问题。
我在Lambda中的代码是这样的:
index.js:(在AWS Lambda函数内部)
S3.getObject(s3FileParams, function(err, data) {
if (err) {
var message = "Error while trying to get file object " + fullFileName + " from bucket " + bucketName + ". Make sure they exist and your bucket is in the same region as this function. Error: " + err;
console.error(message);
}
else {
userMetaDataJson = data.Metadata;
}
resolve();
})
并在测试文件中 index.test.js (使用mocha)
AWSMock.mock('S3', 'getObject', function (params, callback){
var metaDataParams = {
"Metadata": {
"startDate": "2016-11-11 12:34:56:000",
"endDate": "2016-11-11 12:34:56:000",
"userName": "userName",
"originalFileName": "originalFileName"
}
};
callback(false, metaDataParams);
});
当使用mocha运行此测试时,没有调用模拟的getObject()并且它正在调用原始的那个,有什么我可以做的吗?
我可以使用其他方法吗?
答案 0 :(得分:1)
解决方案是在我的AWS Lambda中创建S3实例而不是全局变量
答案 1 :(得分:0)
一个提示:您可以利用一些非常复杂的现有模拟框架,而不是模拟单个S3响应。例如,moto提供的功能与实际的S3 API非常相似。
您还可以查看LocalStack,这是一个结合了现有工具的框架,可提供可用于集成测试的全功能本地云环境(包括S3)。
虽然其中一些工具是用其他语言编写的(Python),但是从node.js测试开始在外部进程中调试测试环境应该很容易。