Node.js 如何在mailgun js的nodejs应用程序中使用jest创建手动模拟?
app/src/emails/account.js中的代码Node.js 如何在mailgun js的nodejs应用程序中使用jest创建手动模拟?,node.js,jestjs,mailgun,Node.js,Jestjs,Mailgun,app/src/emails/account.js中的代码 const mailgun = require("mailgun-js"); const DOMAIN = "sxxxxxxxxxxxxxxxxxxxxxxxxxxx.mailgun.org"; const mg = mailgun({apiKey: process.env.MAILGUN_API_KEY, domain: DOMAIN}); const sendWelcomeEmail = async (email, name) =
const mailgun = require("mailgun-js");
const DOMAIN = "sxxxxxxxxxxxxxxxxxxxxxxxxxxx.mailgun.org";
const mg = mailgun({apiKey: process.env.MAILGUN_API_KEY, domain: DOMAIN});
const sendWelcomeEmail = async (email, name) => {
const dataForMail = {
to: email,
from: 'zzz@xxx.com',
subject: 'Testing!',
text: `Welcome to the app, ${name}, let me know how you get along with the app.`,
}
mg.messages().send(dataForMail)
}
应用程序/测试/模拟/邮枪js中的代码:
module.exports = {
messages() {
},
send() {
},
mailgun() {
}
}
每当我运行jest时,它都会说“mailgun不是一个函数”。如何为此构造函数创建手动模拟?我的模拟是一个对象,而不是一个函数。测试替身需要匹配他们要替换的东西的接口;在本例中,它需要是一个使用messages方法返回对象的函数(使用send方法返回对象)。我的mock根本不符合这个结构。(非常感谢@jornsharpe通知我们这一点) mailgun-js.js需要以同样的方式进行编辑
module.exports = function(apiKey, domain) {
const object2 = {
send() {
}
}
const object1 = {
messages () {
return object2
}
}
return object1
}
注意-“靠近
节点\u模块/
”。我已将其放置在适当的目录中。它说,“邮枪不是一个函数”,这意味着我已经把它放在了正确的文件中。当我有意将文件从“mailgun js.js”重命名为任何其他名称时,测试通过,因为它没有模仿该库。你能帮我编辑这个文件以便通过测试吗?你的模拟是一个对象,不是一个函数。测试替身需要匹配他们要替换的东西的接口;在本例中,它需要是一个使用messages方法返回对象的函数(使用send方法返回对象)。你的模拟完全不符合这个结构。谢谢@jornsharpe帮助我。我按照你说的方式编辑了mailgun-js.js,现在它工作正常了。谢谢