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

u3r8eeie  于 2023-10-17  发布在  Node.js
关注(0)|答案(1)|浏览(145)

我想在cypress测试中使用imap nodejs库来获取电子邮件。一切正常,如果电子邮件被发现。但是,如果没有找到邮件,它会抛出异常。我想尝试给予一些时间,而电子邮件收到,所以想重试取50-100次。你知道怎么做吗?
这是我的imap代码在cypress配置文件

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
})

})

5f0d552i

5f0d552i1#

它在测试中抛出错误,因为在任务if (err) throw err;中。任务中抛出的任何错误都会使调用该任务的测试失败,因此如果您想稍后再试,请不要在那里抛出错误。
而不是使用if (err) return null;
然后在测试中,处理空值以重试,类似于

cy.fetchEmail().then(res => {
  if (res === null) {
    cy.wait(5_000)
    cy.fetchEmail().then(res => {
      ...

相关问题