如何修复警告“赛普拉斯检测到您在测试中返回了承诺”

Ale*_*xMA 4 cypress

我正在用 cypress 编写一个测试,以检查是否将新项目添加到列表中。我不想对长度进行硬编码,我想确认列表的大小增加了 1。此代码有效:

  beforeEach(() => {
    cy.visit('/page/1');
  });

  it('happy path comments', async function() {
    cy.get('[data-cy=commentList]').should('have.length', 1);
    const list = await cy.get('[data-cy=commentList] [data-cy=comment]');
    const beforeLength = list.length;
    cy.get('[data-cy=commentBody]').type('foobar');
    cy.get('[data-cy=submit]').click();
    cy.get('.[data-cy=commentList] [data-cy=comment]').should(
      'have.length',
      beforeLength + 1
    );
    cy.get('[data-cy=commentBody]').should('have.value', '');
  });

Run Code Online (Sandbox Code Playgroud)

但是,这会生成以下警告:

cypress_runner.js:84852 Cypress 警告:Cypress 检测到您在测试中返回了一个承诺,但还在该承诺中调用了一个或多个 cy 命令。

测试标题是:

评论快乐路径评论

虽然这在实践中有效,但它通常表示一种反模式。您几乎不需要同时返回承诺和调用 cy 命令。

我该如何解决这个警告?

Yev*_*kov 8

async/await从您的测试中删除。Cypress 命令不是承诺,尽管表现得像承诺。在这里阅读更多。

此外,您不能分配或使用任何赛普拉斯命令的返回值。命令被排队并异步运行。命令真正返回的是 Chainable,换句话说,它是一种使用所需值解析的队列对象。在这里阅读更多。

  • 我面临着同样的问题。应用程序在某些机器上运行良好,但由于相同的原因在某些机器上失败。不使用“async/await”。并且没有返回语句或对局部变量的赋值。 (3认同)