Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/gwt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 另一个模块中的模拟代码_Javascript_Node.js_Amazon S3_Mocking_Stub - Fatal编程技术网

Javascript 另一个模块中的模拟代码

Javascript 另一个模块中的模拟代码,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

我想模拟AmazonAWS S3
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中的每个服务和方法