2017-11-03 5 views
0

노드에서 단위 테스트를 수행 할 때 S3 호출을 모의 처리하는 방법은 무엇입니까? S3에 대한 실제 호출을하지 않고 함수가 유닛 테스트인지 확인하려고합니다. 모든 것이 예상대로되고 오류가 발생하면 어떻게되는지 테스트하고 싶습니다. 나는 Sinon이 선택의 도구라고 생각하지만 어떻게 확신하지 못합니까?단위 테스트 노드에서 모카가있는 AWS S3 함수

내 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}`); 
 
    }); 
 
});

답변

0

사용 Sinon 좋은 선택이다.

모의 설정과 관련하여 약간의 작업이 필요하므로 aws-sdk-mock을 사용할 수 있지만 두 가지를 모두 사용하게 될 것입니다. aws-sdk-mock

링크 :https://www.npmjs.com/package/aws-sdk-mock) 여담으로


, 당신은 aws-sdk API의 대부분에 .promise()와 수동 약속 생성을 대체 할 수 있습니다.

문서 링크 :http://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/Request.html#promise-property