当前位置: 首页 > 知识库问答 >
问题:

stubing S3在节点中上载。js

高修伟
2023-03-14

我将如何在节点中对S3上传进行存根。js?

为了获得洞察力,我使用摩卡进行测试,使用Sinon进行存根,但我愿意改变任何事情。我有一个文件,它导出一个执行上载的函数。看起来是这样的:

var AWS = require('aws-sdk');
var s3 = new AWS.S3({ params: { Bucket: process.env.S3_BUCKET }});
var params = { Key: key, Body: body };
s3.upload(params, function (error, data) {
  // Handle upload or error
});

如果我尝试存根AWS。S3或AWS。S3。原型,没有任何变化。我假设这是因为我的测试需要aws sdk本身,并且每个函数都有自己的副本。

我的测试是这样的:

describe('POST /files', function () {
  var url = baseURL + '/files';
  it('uploads the file to s3', function (done) {
    var fs = require('fs');
    var formData = {
      video: fs.createReadStream(process.cwd() + '/test/support/video.mp4')
    };
    var params = {url: url, formData: formData};
    request.post(params, function (error, response, body) {
      expect(response.statusCode).to.eq(200);
      expect(response.body).to.eq('Uploaded');
      done();
    });
  });
});

这个测试工作正常,但它不会将上传存根到S3,因此上传实际上要经过:X。

共有3个答案

公孙茂学
2023-03-14
s3UploadStub = AWS.S3.prototype.upload = sandbox.stub();



 it("should  upload  successfully", async function() {
        s3UploadStub.yields(null, data);
        let response = await FileUtil.uploadFile(fileReference,data);
        expect(s3UploadStub.calledOnce).to.be.true;
        expect(response.statusCode).to.equal(200);
        expect(response.body).to.equal(fileReference);
    });
严瀚昂
2023-03-14

你可以用锡农存根。如果您愿意,请按如下所示进行操作:

>

var AWS = require('aws-sdk');
var s3 = new AWS.S3({ params: { Bucket: process.env.S3_BUCKET }});
var params = { Key: key, Body: body };
exports.s3.upload(params, function (error, data) {

});
//Expose S3 instance
exports.s3 = s3;

将同一个实例作为存根,如下所示:

var sinon = require('sinon');
//Import module you are going to test
var UploadService = require('./uploadService');

describe('POST /files', function () {

  before(function() {
    //Stub before, and specify what data you'd like in the callback.
    this.uploadS3Stub = sinon.stub(uploadService.s3, 'upload').callsArgWith(1, null, { data: 'Desired response' });
  });

  after(function() {
    //Restore after
    this.uploadS3Stub.restore();
  });

  var url = baseURL + '/files';
  it('uploads the file to s3', function (done) {
    var fs = require('fs');
    var formData = {
      video: fs.createReadStream(process.cwd() + '/test/support/video.mp4')
    };
    var params = {url: url, formData: formData};
    var self = this;

    request.post(params, function (error, response, body) {
      expect(response.statusCode).to.eq(200);
      expect(response.body).to.eq('Uploaded');
      //You can also check whether the stub was called :)
      expect(self.uploadS3Stub.calledOnce).to.eql(true);
      done();
    });
  });
});
周威
2023-03-14

在节点中模拟S3有几个选项。

一些特定于S3的模块:

  • https://www.npmjs.com/package/mock-s3
  • https://www.npmjs.com/package/mock-aws-s3

一些用于一般AWS模拟的模块:

  • https://www.npmjs.com/package/aws-sdk-mock
  • https://www.npmjs.com/package/mock-aws-sinon
  • https://www.npmjs.com/package/mock-aws

您甚至可以启动一个简单的服务器来响应一些S3 API调用:

  • https://www.npmjs.com/package/s3rver

最后一个可以很容易地在其他语言和运行时使用,而不仅仅是在节点中。

 类似资料:
  • 我只是一个初学者node.js我会尝试用xpress制作一个站点,这样我就可以在那里上传任何东西。我在我的mac上本地设置服务器。 这是我写的代码 server.js 这些是错误信息 节点上载。js公司 /Users/dayatura/Documents/node/node\u modules/express/lib/application。js:209抛出新的TypeError('app.use

  • 问题内容: 我正在尝试用以下方法卸载React.js节点 但是它又回来了。 在当我点击一个元素上,而应卸载根节点被激发。此处的文档 我也尝试过: React.unmountComponentAtNode($(’* [data-reactid =“’+ this._rootNodeID +’”]’)[0]) 该选择器可与一起使用,但不能与之卸载,但文档指出它应为,就像您将用于 经过更多测试之后,结果

  • 我正在通过Node.js1的[node-java]包装器运行一个JNA编译的本机库 这个库是Hunsplaw JNA,它包装了Hunsplaw拼写库。 当试图从lib路径加载本机库时,所发生的情况是节点似乎挂起: 库就在那里,我也尝试了该方法的第二个选项,复制到一个临时文件夹中并从那里加载,这样我就可以看到 它就在那里。

  • 我用jstree制作了一个树,它部分加载,并在扩展节点时通过json_data插件加载。这里是代码的关键: 然后,我想展开一些节点,并选择一个叶节点,这取决于哪个用户正在访问站点。我在一个循环中执行此操作,如下所示: 打开父节点可以正常工作,并且当树显示但firstChild节点未打开时,firstChild将公开。如果我再次启动循环,firstchild将成功打开以显示叶节点。 我的猜测是,当上

  • 我有一个csv格式的数据集。其中一个字段是“elem_type”。基于此类型,我需要创建不同的类型节点,并在使用csv load加载数据时,根据“elem_type”为csv的“列”赋予不同的名称,有什么方法可以做到这一点吗? 我的csv没有标头,数据如下所示: 基于第一个colmuns,即我的“elem_type”,我要加载数据并定义3种类型的节点(Person,Car,Boat)

  • 我试图将一些JSON对象映射到java对象,然后将这些对象保存到我的neo4j DB中。 我想知道是否有使用neo4j-ogm的解决方案,或者我需要添加Spring Data Neo4J(SDN)来解决这个问题?