我想在我的 cypress 测试中使用 imap Nodejs 库来获取电子邮件。如果找到电子邮件,一切正常。但是,如果未找到邮件,则会抛出异常。我想在收到电子邮件时尝试给予一些时间,因此想重试获取 50-100 次。知道怎么做吗?
这是我在 cypress 配置文件中的 imap 代码
const myTask = {
...
imap.once('ready', function() {
openInbox(function (err, box) {
if (err) throw err;
imap.search(filter, function (err, results) {
if (err) throw err;
var f = imap.fetch(results, { bodies: '1', markSeen: true });
f.on('message', function (msg, seqno) {
console.log('Message #%d' + seqno);
console.log('Message type' + msg.text)
var prefix = '(#' + seqno + ') ';
msg.on('body', function (stream, info) {
var buffer = '', count = 0;
stream.on('data', function (chunk) {
buffer += chunk.toString('utf8');
console.log("BUFFER" + buffer)
})
stream.once('end', function () {
if (info.which === '1') {
console.log("BUFFER" + buffer)
}
});
console.log(prefix + 'Body');
stream.pipe(fs.createWriteStream('msg-' + seqno + '-body.txt'));
});
msg.once('attributes', function (attrs) {
console.log(prefix + 'Attributes: %s', inspect(attrs, false, 8));
});
msg.once('end', function () {
console.log(prefix + 'Finished');
});
});
f.once('error', function (err) {
console.log('Fetch error: ' + err);
});
f.once('end', function () {
console.log('Done fetching all messages!');
imap.end();
});
});
});
});
} ...
从命令文件中我调用这个函数
Cypress.Commands.add('fechEmail', () => {
return cy.task('fetchEmail', ['UNSEEN', ['SUBJECT', 'stone']]).then(res => {
return res
})
})
它在测试中抛出错误,因为在任务中
if (err) throw err;
。任务中抛出的任何错误都会导致调用该任务的测试失败,因此如果您想稍后重试,请不要在那里抛出错误。
而不是使用
if (err) return null;
然后在测试中,处理空值以重试,类似于
cy.fetchEmail().then(res => {
if (res === null) {
cy.wait(5_000)
cy.fetchEmail().then(res => {
...