如何修复警告"Cypress detected that you returned a promise in a test"



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

  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', '');
  });

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

cypress_runner.js:84852 柏树警告:柏树检测到您 在测试中返回了一个承诺,但也调用了一个或多个 cy 命令 在那个承诺的里面。

测试标题是:

评论

快乐路径评论

虽然这在实践中有效,但它通常表明 反模式。你几乎不需要回报承诺和 调用 cy 命令。

如何修复此警告?

从测试中删除async/await。柏树命令不是承诺,尽管行为类似于承诺。在此处阅读更多内容。

此外,您不能分配或使用任何 Cypress 命令的返回值。命令排队并异步运行。命令真正返回的是可链接的,换句话说,它是一种队列对象,它使用所需的值进行解析。在此处阅读更多内容。

您可以将

Promise与await关键字一起使用。 并在w3schools上查找更多信息:https://www.w3schools.com/js/js_promise.asp

  • 这对我有很大帮助
// {bidderCreationRequest} was declared earlier
function createBidderObject() {
  const bidderJson = {};
  await new Promise((generateBidderObject) => {
    cy.request(bidderCreationRequest).then(async (bidderCreationResp) => {
      bidderJson.id = bidderDMCreationResp.body.id;
      generateBidderObject(bidderJson);
    });
  });
  return bidderJson.id
}
createBidderObject(); // returns the id of the recently created bidder instead of undefined/null

最新更新