Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 如何在mailgun js的nodejs应用程序中使用jest创建手动模拟?_Node.js_Jestjs_Mailgun - Fatal编程技术网

Node.js 如何在mailgun js的nodejs应用程序中使用jest创建手动模拟?

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) =

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 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,现在它工作正常了。谢谢