【发布时间】:2020-12-23 20:23:03
【问题描述】:
首先,我的测试脚本将涵盖的一些背景知识。
按下网站上的按钮将向测试邮箱发送一封电子邮件。
这封电子邮件可能需要 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);
正确地返回一个空白的 subjects 数组,因为测试邮箱尚未收到电子邮件。
在脚本“有效”的开头添加 30 分钟的暂停,因为在 30 分钟后,subjects 数组被填充,因为电子邮件(99.99% 的时间)在 30 分钟内发送分钟窗口。
但是,这绝对不是理想的,因为电子邮件可能会在 15 分钟内收到,这意味着测试“浪费”了 15 分钟。
所以我最理想的做法是编写某种形式的循环 (?) 来测试 subjects 数组是否已填充。
因此,如果数组已填充,请继续执行其余的测试脚本(这需要测试数组是否包含特定文本)。
如果数组未填充,请等待一分钟后再重试。
每隔一分钟继续此尝试,直到填充数组。
我尝试过 setInterval、For 循环、While 循环等,但我似乎无法让它们工作,我老实说,我没有想法。
任何建议、帮助、参考将不胜感激,如果需要,可以及时添加更多信息。
【问题讨论】:
-
setInterval 似乎是正确的选择
-
你应该看看 Promise (developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…) 和间隔的结合。所以返回一个承诺,并在满足你的条件时解决它。
-
你可以有一些重试承诺策略,比如这个gist.github.com/briancavalier/842626/…
-
你的测试环境是什么?节点版本?
标签: javascript loops setinterval nightwatch.js