Javascript 等待响应体在Cypress中发生变化

Javascript 等待响应体在Cypress中发生变化,javascript,api,get,xmlhttprequest,cypress,Javascript,Api,Get,Xmlhttprequest,Cypress,我正在尝试自动化一种情况,在这种情况下,我需要等待,直到在响应主体中看到成功的价值。我尝试的是: cy.server() cy.route({ method: 'GET', url: 'https://endpoint.com/api/readsomething' auth: { 'username': username 'password': password }, response: {} }).as('checkSt

我正在尝试自动化一种情况,在这种情况下,我需要等待,直到在响应主体中看到成功的价值。我尝试的是:

cy.server()
cy.route({
    method: 'GET',
    url: 'https://endpoint.com/api/readsomething'
    auth: {
        'username': username 
        'password': password
    },
    response: {}
}).as('checkStatus');

cy.wait('@checkStatus').then((ele) => {
expect(ele).should('have.property', 'response.body.latest_run.status', 'Success')
})
})
我收到一个错误,因为:cy.wait在等待5000ms后超时,等待路由:checkStatus的第一个请求。没有发生任何请求


如果您能让我知道我哪里做错了,那就太好了。

您需要触发一个UI操作。如果API请求是在页面加载时触发的,则需要执行cy.reload、cy.visit或单击nav以使请求发生。如果它是由用户的交互触发的。就像点击按钮一样,你需要通过cy来触发它。点击按钮或类似的东西。然后等待它

下面是一个简化了一点的现实例子:

cy.server; 赛道{ 方法:“GET”, url:“api/管道”, 答复:mockedData, }.作为“获取管道”; cy.reload;//重新加载页面,这样我们就可以等待,`@getPipelines`请求得到解决 cy.wait'@getPipelines';
您需要触发一个UI操作。如果API请求是在页面加载时触发的,则需要执行cy.reload、cy.visit或单击nav以使请求发生。如果它是由用户的交互触发的。就像点击按钮一样,你需要通过cy来触发它。点击按钮或类似的东西。然后等待它

下面是一个简化了一点的现实例子:

cy.server; 赛道{ 方法:“GET”, url:“api/管道”, 答复:mockedData, }.作为“获取管道”; cy.reload;//重新加载页面,这样我们就可以等待,`@getPipelines`请求得到解决 cy.wait'@getPipelines';
我通过查看请求cypress文档找到了解决方案-

因为我想要调用的API端点与我正在处理的应用程序不同,所以我使用cy.request而不是cy.server cy.route


我通过查看请求cypress文档找到了解决方案-

因为我想要调用的API端点与我正在处理的应用程序不同,所以我使用cy.request而不是cy.server cy.route


嗨@konekoya谢谢你的回答。但不幸的是,它并没有解决问题,因为我试图从正在开发的应用程序中获得一个完全不同的api端点。因此,我试图调查cy.requestcypress文件,我发现了这一点,我能够实现我一直在寻找的目标。很高兴你解决了这个问题。你可以回答自己的问题并接受它:谢谢你的提示:Hi@konekoya谢谢你的回答。但不幸的是,它并没有解决问题,因为我试图从正在开发的应用程序中获得一个完全不同的api端点。因此,我试图调查cy.requestcypress文件,我发现了这一点,我能够实现我一直在寻找的目标。很高兴你解决了这个问题。你可以回答自己的问题并接受它:谢谢你的提示:
    function getStatus() {
        cy.request({
            method: 'GET',
            url: Cypress.config('endpoint'),
            auth: {
                'username': Cypress.config('username'),
                'password': Cypress.config('password')
            }
        }).then((response) => {
            if (response.body.status == "Success")
                return
            else
                getStatus()
        })
    }

    //Trigger the above function
    cy.then(getStatus)