赛普拉斯等待XHR记录

时间:2019-05-07 13:13:13

标签: javascript xmlhttprequest cypress

我要等待该URL的记录: / hdlasrlogging

这将记录在后台发生的每个事件,并将该事件的消息保存在请求正文中。因此,每个事件都有不同的消息。

例如这样的例子:

enter image description here

我尝试使用该功能来完成此操作:

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

它应该等待,直到从数据库加载了所有条目。 目前,它只是在等待第一次日志记录,但是我正在寻找的日志记录就在后面。

enter image description here


您有什么建议吗?

1 个答案:

答案 0 :(得分:0)

您在此处面临的问题是,package org.XXX.domain.enumeration; /** * The Roles enumeration. */ public enum Roles { NODE, REGIONALADMIN, ADMIN; public static Roles getRoleSearch(String input) { switch (input) { case "NODE": return NODE; case "REGIONALADMIN": return REGIONALADMIN; case "ADMIN": return ADMIN; default: return null; } } } 在即将到来的声明失败时不会重试。它只会尝试一次,这是第一次尚未处理数据。

已知getByTestId中的命令有此缺点。

默认的cypress命令会重试,因此,如果要使用cypress-testing-library选择,则不会出现此问题。

如果您想坚持使用.get(),可以使用cypress-testing-library,但这种情况很棘手,因为.should(fn)也不重试,并且递归启动。这使您在使用该替代方法时非常尴尬。

在没有上下文的情况下,我能看到的最好的方法是抛弃.waitAtLoggingMsg()来支持类似的东西:

.waitAtLoggingMsg()

这将以粗略的方式重试cy.url() .should('include', text.links.segmentmeasurements) .should(() => { cy.getByTestId('TableBody') .should('not.be.empty'); }); 命令。