首页 > 解决方案 > nodejs上的邮件侦听器未断开连接

问题描述

我目前正在使用mail-listener5包来断言电子邮件地址收件箱中的电子邮件数量。

我的测试框架是 nightwatchjs。

目前,我从电子邮件地址收件箱(标题为 getInboxEmails)获取电子邮件数量的命令脚本是;

var  {MailListener}  = require('mail-listener5');

exports.command = function() {
    this.perform(function(done) {
        var mailListener = new MailListener({
            username: '#########@outlook.com',
            password: '#########',
            host: 'imap-mail.outlook.com',
            port: 993,
            tls: true,
            connTimeout: 10000,
            authTimeout: 5000,
            tlsOptions: { rejectUnauthorized: false },
            mailbox: 'Inbox', 
            searchFilter: ['ALL'], 
            markSeen: true,
            fetchUnreadOnStart: false,
            attachments: false,
        });

        mailListener.start();

        mailListener.on('server:connected', function() {});

        mailListener.on('mailbox', function(mailbox) {
            var totalInboxMessages = (mailbox.messages.total);
            console.log('Total number of Inbox emails: ', totalInboxMessages);
        });

        //  mailListener.on('server:disconnected', function() {
        //  });

       //  mailListener.stop();
    done();
    });
};

我的 nightwatchjs 测试脚本看起来像这样;

module.exports = {
    'getting emails...': function (browser) {
        browser.getInboxEmails();
    },

    'bfs': function (browser) {
        browser.url('https://www.motorcyclenews.com/bikes-for-sale/****');
        
        *...assertions, etc*

    },

    'closing the browser': function (browser) {
       browser.browserEnd();
    },
};

当我运行这个 nightwatchjs 脚本时,输出以下内容;

在此处输入图像描述

但是,浏览器不会关闭。

我有点预料到这一点,就像在我的 getInboxEmails 命令脚本中一样;

            //  mailListener.on('server:disconnected', function() {
            //  });

            //  mailListener.stop();

但是,当我取消注释这两个命令时,我没有得到显示的电子邮件数量(但测试/浏览器正确地“关闭”了。

所以现在的输出是;

在此处输入图像描述

因此,当省略断开连接和停止时,似乎正确显示了电子邮件数量,但测试并没有停止。

并且当添加断开和停止时,不会显示电子邮件数量,但测试正确完成。

我想做的是列出电子邮件的数量并让测试结束。

任何帮助将不胜感激。

标签: javascriptnode.jsemailnightwatch.js

解决方案


你需要在 beforeAll 部分初始化你的邮件监听器

并在之后停止

您的示例中的问题是您的停止是在 init 部分达到的,因此您的邮箱侦听器将永远不会被提升

    mailListener.on('mailbox', function(mailbox) {
            var totalInboxMessages = (mailbox.messages.total);
            console.log('Total number of Inbox emails: ', totalInboxMessages);
        });

只需做一些工作人员如下

let mailListener ;
jest.beforeAll(() => {
     mailListener = new MailListener({
            username: '#########@outlook.com',
            password: '#########',
            host: 'imap-mail.outlook.com',
            port: 993,
            tls: true,
            connTimeout: 10000,
            authTimeout: 5000,
            tlsOptions: { rejectUnauthorized: false },
            mailbox: 'Inbox', 
            searchFilter: ['ALL'], 
            markSeen: true,
            fetchUnreadOnStart: false,
            attachments: false,
        });

        mailListener.start();

        mailListener.on('server:connected', function() {});

        mailListener.on('mailbox', function(mailbox) {
            var totalInboxMessages = (mailbox.messages.total);
            console.log('Total number of Inbox emails: ', totalInboxMessages);
        });
});

最后在你的测试的最后部分

jest.afterAll(() => {
    mailListener.stop();
});

希望得到帮助


推荐阅读