cypress.io等待相同的别名

时间:2019-10-28 04:08:11

标签: cypress

cy.server();
cy.route('POST', 'my/api').as('myApi');
...
cy.wait('@myApi');
...
cy.route('POST', 'my/api').as('myApi');
cy.wait('@myApi');

当我的应用在同一测试中两次调用相同的API时,根据上述代码,第二个cy.wait立即完成,因为它看到第一个API已完成。为了解决这个问题,我在所有路由别名后面都添加了一个随机数。这是正确的方法吗?

3 个答案:

答案 0 :(得分:1)

您可能可以做得更好。 cy.route()命令只是一个定义,因此您应该将所有路由分组在文件的顶部。路线只需要定义一次。然后尝试像cy.wait().otherStuff().wait()中那样链接您的等待,或者至少将您的等待与必须先成功的其他内容链接。

答案 1 :(得分:1)

在这种情况下,第二次等待,您可以尝试以下操作。

    cy.server();
    cy.route('POST', 'my/api').as('myApi');
    cy.wait('@myApi').then(() => {
        // You probably want to add some assertions here
    }); 

        // Do your stuff here

    cy.wait(['@myApi', '@myApi']).then(() => {
        // Second assertion. Probably, something should be changed in the second request.
    }); 

答案 2 :(得分:0)

谢谢您的提问!我认为先前的答案是完全正确的。默认情况下,赛普拉斯路由只是别名。您可以在赛普拉斯文档here中找到类似的示例。

因此,您的代码应该是这样的:

cy.server();
cy.route('POST', 'my/api').as('myApi');
cy.wait('@myApi').then(() => {
    // You probably want to add some assertions here
});

// Do your stuff here

cy.wait('@myApi').then(() => {
    // Second assertion. Probably, something should be changed in the second request.
});