问题描述
首先,了解我的测试脚本要涵盖的内容。
按下网站上的按钮将向测试邮箱发送一封电子邮件。
此电子邮件可能需要10到30分钟的时间才能到达测试邮箱。
因此,请使用imap-simple中的以下代码;
'get new email info': function(browser) {
imaps.connect(config).then(function (connection) {
return connection.openBox('INBox').then(function () {
var searchCriteria = ['UNSEEN'];
var fetchOptions = {
bodies: ['HEADER','TEXT'],markSeen: false
};
return connection.search(searchCriteria,fetchOptions).then(function (results) {
var subjects = results.map(function (res) {
return res.parts.filter(function (part) {
return part.which === 'HEADER';
})[0].body.subject[0];
});
console.log(subjects);
正确返回一个空白的主题数组,因为测试邮箱尚未收到该电子邮件。
在脚本“作品”的开头添加30分钟的暂停时间,因为在30分钟后填充了 subjects 数组,原因是在30分钟内发送了电子邮件(占99.99%的时间)分钟窗口。
但是,绝对不理想,因为可能会在15分钟内收到电子邮件,这意味着测试在15分钟内“浪费”了。
所以我理想地要做的是编写某种形式的循环(?),以测试是否填充了主题数组。
因此,如果填充了数组,请继续执行其余的测试脚本(这需要测试数组是否包含特定文本)。
如果未填充该阵列,请等待一分钟再尝试。
每分钟继续尝试一次,直到填充阵列。
我尝试了 setInterval ,用于循环,同时循环等,但是我似乎无法使它们正常工作,我说实话,我没有主意。
我们将不胜感激任何建议,帮助和参考,如有需要,可以及时添加更多信息。
解决方法
一种方法是使用递归。
const createPromise = ms => new Promise((resolve,reject) => {
setTimeout(() => resolve(ms),ms)
});
function findUnseenEmails(connection) {
return connection.openBox('INBOX').then(function () {
var searchCriteria = [
'UNSEEN'
];
var fetchOptions = {
bodies: ['HEADER','TEXT'],markSeen: false
};
return connection.search(searchCriteria,fetchOptions).then(function (results) {
var subjects = results.map(function (res) {
return res.parts.filter(function (part) {
return part.which === 'HEADER';
})[0].body.subject[0];
});
console.log(subjects);
return subjects.length > 0 ? subjects : createPromise(5000).then(function() { return findUnseenEmails(connection)});
});
});
}
imaps.connect(config).then(function (connection) {
return findUnseenEmails(connection);
}).then((subjects) => console.log('finished',subjects));
当然存在堆栈溢出的可能性和危险,但是在这种情况下,请随时返回堆栈溢出,并借助我们的社区非递归解决方案在这里找到。
结果:
编辑:
回答有关关闭连接的问题:
我会这样做(在 findUnseenEmails 函数中)
if (subjects.length > 0) {
connection.end();
return subjects;
} else {
return createPromise(5000).then(function() { return findUnseenEmails(connection)});
}