繁体   English   中英

cypress 中未处理的 promise 拒绝导致的错误

[英]Error caused by unhandled promise rejection in cypress

我收到此错误,不知道如何解决,请您看看。

我的代码,我正在使用第三方服务获取基于主题的最新 email。

export class TestmailService {
  static async pollEmail(subject: string, tag: string): Promise<TestmailEmail | null> {
    const namespace = 'nv5zl';
    const apiKey = '7d4c581c-ca94-46c8-a016-230619876eff';

    const timestamp = `${+Date.now()}`;

    for (let i = 0; i <= 20; i++) {
      const { body } = await new Cypress.Promise<Cypress.Response<TestmailInbox>>((resolve) => {
        const url = new URL('https://api.testmail.app/api/json');
        url.searchParams.append('apikey', apiKey);
        url.searchParams.append('namespace', namespace);
        url.searchParams.append('tag', tag);
        url.searchParams.append('timestamp_from', timestamp);

        cy.request<TestmailInbox>('GET', `${url}`).then((response) => resolve(response));
      });

      if (body.emails.length) {
        const email = body.emails.find((e) => e.subject === subject);
        if (email) return email;
      }

      // eslint-disable-next-line cypress/no-unnecessary-waiting
      cy.wait(3000);
    }

    return null;
  }
}
  1. 重置密码应该无法使用旧密码登录: CypressError:以下错误源于您的测试代码,而不是来自 Cypress。 它是由未处理的 promise 拒绝引起的。

赛普拉斯检测到您从命令中返回了 promise,同时还在该 promise 中调用了一个或多个 cy 命令。

返回 promise 的命令是:

cy.get()

您在 promise 中调用的 cy 命令是:

cy.wait()

因为 Cypress 命令已经类似于 promise,所以您不需要包装它们或返回您自己的 promise。

赛普拉斯将使用最终赛普拉斯命令产生的任何结果来解析您的命令。

这是一个错误而不是警告的原因是因为 Cypress 在内部将命令串行排队,而 Promises 在调用时立即执行。 试图调和这将阻止赛普拉斯解决问题。

当赛普拉斯检测到源自您的测试代码的未捕获错误时,它将自动使当前测试失败。

我不使用 cypress,但查看您提供的代码,它看起来已经基于 promise,如果是这样,请不要创建 Promise 构造函数。 -> new Promise() ,并使用await保留所有内容。

所以这样的事情应该有效。 ->

export class TestmailService {
  static async pollEmail(subject: string, tag: string): Promise<TestmailEmail | null> {
    const namespace = 'nv5zl';
    const apiKey = '7d4c581c-ca94-46c8-a016-230619876eff';
    const timestamp = `${+Date.now()}`;
    const url = new URL('https://api.testmail.app/api/json');
    url.searchParams.append('apikey', apiKey);
    url.searchParams.append('namespace', namespace);
    url.searchParams.append('tag', tag);
    url.searchParams.append('timestamp_from', timestamp);

    for (let i = 0; i <= 20; i++) {
      const { body } = await cy.request<TestmailInbox>('GET', `${url}`);
      if (body.emails.length) {
        const email = body.emails.find((e) => e.subject === subject);
        if (email) return email;
      }
      // eslint-disable-next-line cypress/no-unnecessary-waiting
      await cy.wait(3000); //don't forget to await
    }

    return null;
  }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM