单元测试AWS S3在Node中与Mocha一起运行

时间:2017-11-03 06:24:03

标签: node.js unit-testing amazon-s3 mocha

如何在Node中进行单元测试时模拟S3调用。我想确保该功能是单元测试的,而不是实际调用S3。我想测试如果一切按预期发生并且有错误会发生什么。我认为Sinon是首选工具,但我不确定如何?

我的s3文件是:

const AWS = require('aws-sdk');

AWS.config.region = 'ap-southeast-2';
const s3 = new AWS.S3();
const { S3_BUCKET } = process.env;
const propertyCheck = require('./utils/property-check');

module.exports.uploadS3 = (binary, folderName, fileName) => new Promise((resolve, reject) => {
    if (!propertyCheck.valid(binary) ||
        !propertyCheck.validString(folderName) ||
        !propertyCheck.validString(fileName)) {
        const error = '[uploadS3] Couldn\'t upload to S3 because of validation errors.';
        console.error(error);
        return reject(new Error(error));
    }
    const finalUrl = `${encodeURIComponent(folderName)}/${encodeURIComponent(fileName)}`;
    s3.putObject({
        Body: binary,
        Key: finalUrl,
        Bucket: S3_BUCKET,
        ContentType: 'application/pdf',
        ContentDisposition: 'inline',
        ACL: 'public-read'
    }, (error, data) => {
        if (error) {
            console.error(error);
            return reject(new Error(`[uploadS3] ${error}`));
        }
        resolve(`https://${S3_BUCKET}.s3.amazonaws.com/${finalUrl}`);
    });
});

1 个答案:

答案 0 :(得分:1)

使用Sinon是一个很好的选择。

您可以使用aws-sdk-mock,因为它可以完成设置模拟所涉及的一些工作,但您可能会发现自己使用这两种工作。

指向aws-sdk-mock的链接: https://www.npmjs.com/package/aws-sdk-mock

另外,您可以使用大多数.promise() API上的aws-sdk替换手动创建Promise。

文档链接: http://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/Request.html#promise-property