javascript - 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();
但是,当我取消注释这两个命令时,我没有得到显示的电子邮件数量(但测试/浏览器正确地“关闭”了。
所以现在的输出是;
因此,当省略断开连接和停止时,似乎正确显示了电子邮件数量,但测试并没有停止。
并且当添加断开和停止时,不会显示电子邮件数量,但测试正确完成。
我想做的是列出电子邮件的数量并让测试结束。
任何帮助将不胜感激。
解决方案
你需要在 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();
});
希望得到帮助
推荐阅读
- jquery - Wordpress rest API 自定义端点,使用 Jquery .getJSON 模板文字,只有一项未显示
- database - MongoDB 集合更新尝试给出“标识符在数字文字后立即启动”错误
- php - 在特征中使用构造函数的替代方法
- c++ - 在一个方法中设置多个类成员是个好主意吗?
- sql-server - 无法删除索引,因为它不是统计信息集合
- python - 使用 Python 向 JSON 数据添加“值”信息
- react-native - 使用 react-navigation 导航到另一个屏幕
- reactjs - 如何在 REACT SSR 中使用 SASS?
- python-3.x - TypeError 是什么意思:'builtin_function_or_method' 对象不可下标?
- xcode - 使用 ios Simulator 进行博览会反应原生应用程序