我该如何在 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(使用前将#替换为@)