【问题标题】:Cypress wait for xhr logging赛普拉斯等待 xhr 日志记录
【发布时间】:2019-05-07 13:13:13
【问题描述】:

我想等待记录此网址:/hdlasrlogging

这会记录在后台发生的每个事件,并将事件的 Msg 保存在 requestbody 中。所以每个事件都有不同的消息。

例如这样:

我尝试用那个函数来完成这个:

Cypress.Commands.add('waitAtLoggingMsg', (logMsg)=>{

    return(
        cy.wait('@logging').then(data=>{
            let msg = data.requestBody.msg;
            expect(msg).to.include(logMsg);
        })
    );

});

在这部分测试中

            cy.url().should('include', text.links.segmentmeasurements);

            cy.waitAtLoggingMsg('FETCH_SEGMEAS_LIST_OVERVIEW_SUCCESS');
            cy.get('[data-testid = "TableBody"]').should('not.be.empty');

它应该等到数据库中的所有条目都加载完毕。 目前它只是在等待第一次记录,但我正在寻找的记录在后面。


你有什么建议吗?

【问题讨论】:

  • 有什么不好的?
  • 在修改后的版本中可以看到。

标签: javascript xmlhttprequest cypress


【解决方案1】:

您在这里面临的问题是getByTestId 在即将到来的断言失败时不会重试。它只尝试一次,第一次数据还没有处理完。

来自cypress-testing-library 的命令已知有这个缺点。

默认的 cypress 命令会重试,因此如果您使用 .get() 进行选择,则不会出现此问题。

如果你想坚持使用cypress-testing-library,有一个使用.should(fn) 的解决方法,但在你的情况下,这很棘手,因为.waitAtLoggingMsg() 也不会重试并且是递归启动的。这让您在使用该解决方法时处于非常尴尬的境地。

我能在没有上下文的情况下看到的最好方法是放弃.waitAtLoggingMsg(),转而使用以下内容:

cy.url()
    .should('include', text.links.segmentmeasurements)
    .should(() => {
        cy.getByTestId('TableBody')
            .should('not.be.empty');
    });

这将以粗略的方式重试getByTestId() 命令。

【讨论】:

  • 感谢您的帮助。这会起作用,但我的问题是我想等待日志记录。我刚刚编辑了我的代码并发布了。
  • 在这种情况下考虑使用 3 个.should() 命令。在第二个.should() 调用.waitAtLoggingMsg() 并从该命令中删除递归,因为.should() 将为您处理重试。
猜你喜欢
  • 2020-05-09
  • 1970-01-01
  • 2022-10-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-23
  • 2023-03-23
  • 2021-03-27
相关资源
最近更新 更多