如何使用 IMAP Nodejs 和 cypres 重试获取电子邮件

问题描述 投票:0回答:1

我想在我的 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
})

})

node.js cypress imap
1个回答
0
投票

它在测试中抛出错误,因为在任务中

if (err) throw err;
。任务中抛出的任何错误都会导致调用该任务的测试失败,因此如果您想稍后重试,请不要在那里抛出错误。

而不是使用

if (err) return null;

然后在测试中,处理空值以重试,类似于

cy.fetchEmail().then(res => {
  if (res === null) {
    cy.wait(5_000)
    cy.fetchEmail().then(res => {
      ...
© www.soinside.com 2019 - 2024. All rights reserved.