在 Node.js 中对 S3 上传进行存根

2024-02-26

我该如何在 Node.js 中存根 S3 上传?

为了获得洞察力,我使用 Mocha 进行测试,使用 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 or AWS.S3.prototype, 没有什么变化。我认为这是因为我的测试需要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。


在 Node.js 中有多种模拟 S3 的选项。

S3 特有的一些模块:

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

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

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

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

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

最后一个可以轻松地在其他语言和运行时中使用,而不仅仅是在 Node.js 中。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Node.js 中对 S3 上传进行存根 的相关文章

随机推荐

  • 如何在 podspec 中添加捆绑目标

    我想做一个 podspec这个静态库 https github com thestk stk tree master iOS 在图书馆的 Xcode 项目中 我有一个 a图书馆的目标 以及 bundle目标为bundle https dev
  • flutter 中的多选项卡/页面视图

    如何在 flutter 中创建多页面视图 其中页面对应于底部导航栏中的选项卡 以便与页面对应的小部件仅按需构建一次 例如 考虑一个简单的 facebook 应用程序类型的 UI 带有两个选项卡 提要和具有以下行为的通知 提要和通知都是通过网
  • 当弹出窗口打开时,单击 Windows 标题栏的最小化、最大化和关闭按钮不起作用

    当我的弹出窗口打开时 第一次单击最小化或最大化或关闭按钮不起作用 第一次单击这些标题栏按钮将关闭弹出菜单并转移焦点 然后第二次单击窗口的最小化 最大化 关闭 有什么方法可以在第一次单击时激活这些标题栏按钮吗 主窗口 xaml
  • 切换目标框架后 System.Data.SQLite.DLL 不再加载

    我不得不从 net 4 5 切换到 net 4 0 因为我的一些客户仍然使用 WinXP 现在 切换后 这是我收到的错误 Could not load file or assembly System Data SQLite Version
  • C# 结合 GeckoFX + Tor.NET 库

    我正在尝试结合 GeckoFx 库和 Tor NET 库 在我的代码中 我做好了使用 tor 网络的所有准备 ClientCreateParams createParameters new ClientCreateParams create
  • Netbeans 8.2 无法验证 Git 凭据?

    我正在制作一个 Java 项目 该项目已在 github 上进行了多次提交 我最近将 Kubuntu 上的操作系统版本从 17 10 gt 18 04 更改 并安装了带有 Java 版本 1 8 0 171 的 Netbeans 8 2 以
  • Flutter插件:InAppPurchasePlugin.java使用未经检查或不安全的操作

    当我尝试在应用程序 pubspec yaml 文件中添加 in app purchase 插件时 会发生以下错误 就在添加插件之后 与任何特定代码无关 Note Users tanzimfahim flutter pub cache hos
  • GetAltTabInfo 用法?

    我无法使用 GetAltTabInfo 可能是一个愚蠢的错误 但这有什么问题呢 HWND taskSwitcher FindWindow L TaskSwitcherWnd L Task Switching ALTTABINFO altTa
  • 如何在android中的字符串中的每个“\n”之后添加行间距?

    正如问题所明确指出的那样 我想在每个之后添加一个小行距 n在 Android 资源文件的字符串中定义 假设我们在 xml 中定义了一个字符串 如下所示
  • 重置表单,无需 JavaScript? (输入类型=重置不起作用)

    好吧 我想标题已经说明了一切 我正在寻找一种重置表单中所有字段的方法 我尝试过以下一些方法
  • 跨多个服务器扩展 Socket.IO

    我一直在寻找有关为 Node js Socket IO 安装设置多服务器集群的帮助 这就是我正在尝试做的 在 F5 负载均衡器中有 1 个 VIP 指向n运行 Express 和 Socket IO 的 Node 服务器数量 让客户端通过以
  • 我应该如何 scipy.optimize 具有边界的多元且不可微的函数?

    我遇到了以下优化问题 目标函数是一个多变量且不可微的函数 它将标量列表作为参数并返回标量 它是不可微的 因为函数内的计算基于 pandas 和一系列滚动 std 等操作 伪代码如下 def target function x list gt
  • 如何强制 Xcode 使用自定义编译器?

    我想强制 Xcode 使用自定义编译器 从 src 构建的 clang llvm 以便我可以使用 clang 插件 我的Xcode版本是7 3 1 人们说使用自定义工具链是可能的 我没有对它们进行研究 因为更简单的解决方案对我来说效果很好
  • 如何更新 npm 模块,忽略 git 存储库

    我分叉了一个 npm 模块 现在它是一个 git 存储库 所以我的 package json dependencies some module git https github com my name some module git 分叉的
  • Git 存储库内部格式解释

    有没有关于 Git 如何在其存储库中存储文件的文档 我尝试在互联网上搜索 但没有可用的结果 也许我使用了不正确的查询 或者也许这是一个伟大的秘密 Git 存储库内部格式 让我解释一下 为什么我需要这些火箭科学信息 我正在使用 C 从存储库中
  • 使用 ruby​​ 迭代 yaml 数组

    我申请了YAML load file到我的示例文件 languages name English iso 639 en native name English region UK US name Klingon iso 639 tlh na
  • Delphi 2009 中如何重定向控制台(stdin、stderr)?

    我在互联网上尝试了几个示例 但它们都不起作用 脚本未执行 也许是因为适用于 Delphi 2009 之前的 unicode 我需要运行一些 python 脚本并向它们传递参数 例如 python Plugins RunPlugin py a
  • 最有用的软件开发指标是什么? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 通过使用一列作为新级别将列更改为多索引

    我有一个数据框 df pd DataFrame from dict Close 1 14 03 3 14 02 0 79 88 2 80 31 High 1 14 3 3 14 33 0 80 22 2 81 19 Low 1 14 03
  • 在 Node.js 中对 S3 上传进行存根

    我该如何在 Node js 中存根 S3 上传 为了获得洞察力 我使用 Mocha 进行测试 使用 Sinon 进行存根 但我愿意改变任何东西 我有一个导出执行上传功能的文件 它看起来像这样 var AWS require aws sdk