gpt4 book ai didi

javascript - node.js 模拟 sendmailer 传输器内部函数

转载 作者:行者123 更新时间:2023-11-28 20:14:06 30 4
gpt4 key购买 nike

我在 AWS lambda 中使用 Node 处理程序,我需要使用该函数的集成测试制作另一个文件,但我无法使用 sinon 或 mockery 模拟传输器。

index.js 函数:

var nodemailer = require('nodemailer');

exports.handler = (event, context, callback) =>
{
var transporter=createTransporter();
transporter.sendMail(data, function (error, success) {
console.log(error);
response = getResponse(404, error);
}
callback(null, response);
});
}

function createTransporter() {
return nodemailer.createTransport({
service: "SMTP",
auth: {
user: "XXXX@XXX",
pass: "XXXX"
}
});
}

目的是模拟函数 createTransporter() 以便它在使用 mocha 和 expect 的 javascript 文件测试中调用时不发送任何电子邮件:

var mockery = require('mockery');
var nodemailerMock = require('nodemailer-mock');
var index = require("../index.js");

describe("The handler function tests", function () {
before(function () {
mockery.enable({
warnOnUnregistered: false
});
mockery.registerMock('nodemailer', nodemailerMock);
});

it('JSON error html ', function () {
var callback = function (name, response) {
expect(JSON.stringify(response.statusCode)).to.be('404');
};
var context = {};
index.handler(event, context, callback);
});
});

最佳答案

我写了nodemailer-mock :)

你遇到的问题是你在通过 mockery,所以它已经在模块缓存中了。我在 README 的示例中包含了 //Make sure anything that uses nodemailer is loaded here, after it is loaded here...,但应该更清楚。

在模拟 nodemailer 之后移动 require("../index.js") 它将按预期工作。

var mockery = require('mockery');
var nodemailerMock = require('nodemailer-mock');

// don't require here since you will get the real nodemailer and cache it
var index;

describe("The handler function tests", function () {
before(function () {
mockery.enable({
warnOnUnregistered: false
});
mockery.registerMock('nodemailer', nodemailerMock);

// do the require() here after nodemailer is mocked
index = require("../index.js");
});

// your tests here should now use nodemailer-mock
it('JSON error html ', function () {
var callback = function (name, response) {
expect(JSON.stringify(response.statusCode)).to.be('404');
};
var context = {};
index.handler(event, context, callback);
});
});

另一种选择是使用 { useCleanCache: true } 选项调用 mockery.resetCache();,尽管我得到了不同的结果。参见 Controlling the Module Cache在 mock 文档中。

关于javascript - node.js 模拟 sendmailer 传输器内部函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43505744/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com