[英]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;
}
}
赛普拉斯检测到您从命令中返回了 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.