javascript - 如何 stub 一个使用 HTTP 响应进行响应的函数?

标签 javascript node.js express amazon-s3 sinon

我正在使用 ExpressJS,并且想要 stub 一个以 HTTP 响应作为路由器一部分进行响应的函数。特别是,我正在尝试 stub 对 Amazon S3 的请求。

app.get('/', (req, res, next) => {
  s3.getSignedUrl('putObject', (err, url) => {
    res.json({ url: url });
  });
};

我正在尝试使用 sinon stub getSignedUrl

sinon.stubs(s3, 'getSignedUrl').returns({})

如何正确 stub 此方法?我不想每次都向S3发出请求。

最佳答案

您不需要对此进行 stub ,因为 getSignedUrl 实际上并未向 S3 发出请求。

签名 URL 完全在本地生成...伴随 URL 的请求的规范版本使用散列消息身份验证代码 (HMAC) 算法进行签名,该算法生成服务稍后可以使用的签名来验证该签名请求签名是使用有效凭据创建的(但该签名在计算上无法进行逆向工程。)

您可以通过多种方式向自己说明这一点:在循环中为同一对象和参数生成签名 URL,您会注意到它们实际上仅随着系统时钟每秒向前滴答而变化。将时钟调慢几秒钟,生成的 URL 的周期将根据您的系统时钟的时间以相同的值重复进行。或者,为不存在的对象或存储桶生成签名 URL...生成是本地的,因此不会发生错误。或者编造一个假的访问 key ID 和 secret 。您可以全天生成签名 URL。如果您尝试使用它们,它们实际上不会有效,但仍然可以毫无错误地生成它们。

关于javascript - 如何 stub 一个使用 HTTP 响应进行响应的函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48999803/

相关文章:

javascript - 如何去除javascript中的不透明度?

javascript - 如何以人们可以打开的方式编译neutralinojs项目?

javascript - 有没有办法使用ajax水平对齐动态卡?

javascript - Sequelize 关联和 api 路由。无法从数据库检索信息

javascript - JWT:在到期后一分钟或更短时间内将新 token 传递给客户端。坏主意还是好主意?

javascript - 无法在 Draft.js 中设置 editorState (它看起来不可变,但没有错误)

javascript - 如何将数据从 ReactJS 发布到 NodeJS Express API

node.js - 运行 grunt 时出现错误 : spawn ./node_modules/.bin/grunt ENOENT

javascript - socket.io 和服务器

javascript - 在 Nodejs 中,如何停止 FOR 循环直到 MongoDB 调用返回