我正在使用 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/