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

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

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

  1. const myTask = {
  2. ...
  3. imap.once('ready', function() {
  4. openInbox(function (err, box) {
  5. if (err) throw err;
  6. imap.search(filter, function (err, results) {
  7. if (err) throw err;
  8. var f = imap.fetch(results, { bodies: '1', markSeen: true });
  9. f.on('message', function (msg, seqno) {
  10. console.log('Message #%d' + seqno);
  11. console.log('Message type' + msg.text)
  12. var prefix = '(#' + seqno + ') ';
  13. msg.on('body', function (stream, info) {
  14. var buffer = '', count = 0;
  15. stream.on('data', function (chunk) {
  16. buffer += chunk.toString('utf8');
  17. console.log("BUFFER" + buffer)
  18. })
  19. stream.once('end', function () {
  20. if (info.which === '1') {
  21. console.log("BUFFER" + buffer)
  22. }
  23. });
  24. console.log(prefix + 'Body');
  25. stream.pipe(fs.createWriteStream('msg-' + seqno + '-body.txt'));
  26. });
  27. msg.once('attributes', function (attrs) {
  28. console.log(prefix + 'Attributes: %s', inspect(attrs, false, 8));
  29. });
  30. msg.once('end', function () {
  31. console.log(prefix + 'Finished');
  32. });
  33. });
  34. f.once('error', function (err) {
  35. console.log('Fetch error: ' + err);
  36. });
  37. f.once('end', function () {
  38. console.log('Done fetching all messages!');
  39. imap.end();
  40. });
  41. });
  42. });
  43. });
  • 你好
    从命令文件中调用这个函数
  1. Cypress.Commands.add('fechEmail', () => {
  2. return cy.task('fetchEmail', ['UNSEEN', ['SUBJECT', 'stone']]).then(res => {
  3. return res
  4. })

})

5f0d552i

5f0d552i1#

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

  1. cy.fetchEmail().then(res => {
  2. if (res === null) {
  3. cy.wait(5_000)
  4. cy.fetchEmail().then(res => {
  5. ...

相关问题