如何存根以 HTTP 响应响应的函数?
How to stub a function that responds with an HTTP response?
我正在使用 ExpressJS 并希望将一个以 HTTP 响应响应的函数存根作为路由器的一部分。特别是,这是我试图存根的对 Amazon S3 的请求。
app.get('/', (req, res, next) => {
s3.getSignedUrl('putObject', (err, url) => {
res.json({ url: url });
});
};
我正在尝试使用 sinon
存根 getSignedUrl
。
sinon.stubs(s3, 'getSignedUrl').returns({})
我怎样才能正确地存根这个方法?我不想每次都向S3发出请求。
您不需要存根,因为 getSignedUrl
实际上并没有向 S3 发出请求。
已签名的 URLs 完全在本地生成...URL 附带的请求的规范版本使用生成签名的散列消息身份验证代码 (HMAC) 算法进行签名该服务稍后可以用来验证请求签名是使用有效凭据创建的(但签名是 computationally-infeasible 到 reverse-engineer。)
您可以通过几种方式向自己说明这一点:在一个循环中为相同的对象和参数生成带符号的 URLs,您会注意到它们实际上只随着您的系统时钟而改变每秒向前滴答作响。将您的时钟调慢几秒钟,生成的 URLs 的循环将根据 您的 系统时钟上的时间以相同的值重复自身。或者,为不存在的对象或桶生成带符号的 URLs ...生成是本地的,因此不会发生错误。或者编一个假的access-key-id和秘密。您可以整天生成已签名的 URL。如果您尝试使用它们,它们实际上不会有效,但它们仍然可以无错误地生成。
我觉得你的代码不错。这在这里应该有效:
const sinon = require('sinon');
const s3 = require('s3');
sinon.stub(s3, 'getSignedUrl', params => {
return Promise.resolve('http://dummy-url.com/signed');
});
const url = s3.getSignedUrl('putObject');
console.log(url);
而且您没有在控制台中看到 TypeError: stub(obj, 'meth', fn) has been removed, see documentation
?然后你需要改变语法。
我正在使用 ExpressJS 并希望将一个以 HTTP 响应响应的函数存根作为路由器的一部分。特别是,这是我试图存根的对 Amazon S3 的请求。
app.get('/', (req, res, next) => {
s3.getSignedUrl('putObject', (err, url) => {
res.json({ url: url });
});
};
我正在尝试使用 sinon
存根 getSignedUrl
。
sinon.stubs(s3, 'getSignedUrl').returns({})
我怎样才能正确地存根这个方法?我不想每次都向S3发出请求。
您不需要存根,因为 getSignedUrl
实际上并没有向 S3 发出请求。
已签名的 URLs 完全在本地生成...URL 附带的请求的规范版本使用生成签名的散列消息身份验证代码 (HMAC) 算法进行签名该服务稍后可以用来验证请求签名是使用有效凭据创建的(但签名是 computationally-infeasible 到 reverse-engineer。)
您可以通过几种方式向自己说明这一点:在一个循环中为相同的对象和参数生成带符号的 URLs,您会注意到它们实际上只随着您的系统时钟而改变每秒向前滴答作响。将您的时钟调慢几秒钟,生成的 URLs 的循环将根据 您的 系统时钟上的时间以相同的值重复自身。或者,为不存在的对象或桶生成带符号的 URLs ...生成是本地的,因此不会发生错误。或者编一个假的access-key-id和秘密。您可以整天生成已签名的 URL。如果您尝试使用它们,它们实际上不会有效,但它们仍然可以无错误地生成。
我觉得你的代码不错。这在这里应该有效:
const sinon = require('sinon');
const s3 = require('s3');
sinon.stub(s3, 'getSignedUrl', params => {
return Promise.resolve('http://dummy-url.com/signed');
});
const url = s3.getSignedUrl('putObject');
console.log(url);
而且您没有在控制台中看到 TypeError: stub(obj, 'meth', fn) has been removed, see documentation
?然后你需要改变语法。