【发布时间】:2018-05-03 04:49:27
【问题描述】:
我对单元测试真的很陌生,我试图使用sinon.js 模拟aws.ses 方法,但我关心的是我如何调用sesConstructor 方法。由于它没有从ses.js 导出,我在测试套件中声明了sesConstructor 方法。
如果有人能告诉我这是否是一个完整的反模式以及是否有任何其他更好的解决方案(不使用'rewire'模块),我将不胜感激
ses.js
let ses = {};
const sesConstructor = () => {
AWS.config.update({
accessKeyId: configurations.AWS_CONFIG.ACCESSKEYID,
secretAccessKey: configurations.AWS_CONFIG.SECRECTACCESSKEY,
region: configurations.AWS_CONFIG.REGION
});
ses = new AWS.SES({ apiVersion: "2010-12-01" });
};
export const sendTemplatedEmail = (emailTo, templateName, templateData) => {
sesConstructor();
const params = {
Destination: {
ToAddresses: emailTo
},
Source: process.env.emailSource,
Template: templateName,
TemplateData: JSON.stringify(templateData)
};
return ses.sendTemplatedEmail(params).promise();
};
export default { sendTemplatedEmail };
ses.test.js
describe("SES", () => {
const emailTo = ["test@gmail.com"];
const templateName = "template";
const templateData = "test";
process.env.emailSource = "test@gamil.com";
const sendEmail = sendTemplatedEmail(emailTo, templateName, templateData);
it("should return a promise", () => {
expect(sendEmail).to.be.a("promise");
});
describe("sesConstructor", () => {
it("should call AWS SES", () => {
const sesConstructor = data => {
const ses = new AWS.SES(data); // eslint-disable-line no-unused-vars
};
const mockAWS = sinon.mock(AWS);
mockAWS
.expects("SES")
.once()
.withArgs({
apiVersion: "2010-12-01"
})
.returns(true);
sesConstructor({ apiVersion: "2010-12-01" });
mockAWS.verify();
mockAWS.restore();
});
});
});
【问题讨论】:
标签: javascript unit-testing dependency-injection sinon