Javascript 另一个模块中的模拟代码
我想模拟AmazonAWS S3Javascript 另一个模块中的模拟代码,javascript,node.js,amazon-s3,mocking,stub,Javascript,Node.js,Amazon S3,Mocking,Stub,我想模拟AmazonAWS S3getObject 我要测试的代码如下:它位于helper.js var AWS = require('aws-sdk'); var s3 = new AWS.S3(); exports.get_data_and_callback = function(callback, extra){ s3.getObject( {Bucket: SRC_BUCKET, Key: SRC_KEY}, function (err, data) { if
getObject
我要测试的代码如下:它位于helper.js
var AWS = require('aws-sdk');
var s3 = new AWS.S3();
exports.get_data_and_callback = function(callback, extra){
s3.getObject( {Bucket: SRC_BUCKET, Key: SRC_KEY},
function (err, data) {
if (err != null) {
console.log("Couldn't retrieve object: " + err);
}else{
console.log("Loaded " + data.ContentLength + " bytes");
callback(data, extra);
}
});
}
在test/helper\u test.js
中,我编写了一个测试,该测试应该模拟模块AWS
var assert = require('assert');
var mockery = require('mockery');
describe("helper", function() {
it('loads and returns data from S3 to a callback', function(){
mockery.enable();
var fakeaws = {
S3: function(){
return {
getObject: function(params, callback){
callback(null, "hello")
}
}
}
}
mockery.registerSubstitute('aws-sdk', fakeaws);
function replace_function(err, data){
console.log(data);
}
require('../helper.js').get_data_and_callback(replace_function, null);
});
});
当我在测试文件测试/helper\u Test.js
中需要AWS时,如下所示:
aws = require('aws-sdk');
s3 = new aws.S3;
s3.getObject(replace_function)
然后我的代码工作,它打印出hello
但是的执行需要('../helper.js')。获取_数据和_回调(replace_函数,null)代码>
无法按预期工作,AWS保持不变,不会被myfakeaws取代。我错了什么?您是否有其他解决方案来取代S3
谢谢我们创建了一个npm模块,模拟了所有AWS SDK服务和方法
它真的很容易使用。只需使用服务、方法和存根函数调用AWS.mock
AWS.mock('S3', 'getObject', function(params, callback) {
callback(null, 'success');
});
然后通过调用以下命令在测试后恢复方法:
AWS.restore('S3', 'getObject');
这适用于as sdk中的每个服务和方法