我正在开发一个 React 应用程序,我使用 Cypress 进行测试。我的要求是比较我们在应用程序中发送的有效负载和生态系统(数据库/后端)的有效负载。通过使用“拦截”,我们可以从应用程序获取请求和响应,但问题是我们具有具有不同负载的相同 URL,因此每次它只采用一个 API 并传递结果。需要从 API 获取不同的请求和响应。有人可以帮忙吗?
cy.intercept({ method: 'POST', url: Cypress.env("URL") }).as('call')
cy.wait('@call').then(({ request, response }) => {
console.log(request.body,"Hey")
// console.log(response.body,"body")
//get dynamically data from json file
cy.fixture(`kpiId${request.body.kpiId}.json`).then((jsonData) => {
// Access and use jsonData here
let json = jsonData
console.log(json,"jsonnnnn")
console.log(`kpiId${request.body.kpiId}.json`,jsonData)
expect(request.body).to.deep.eq(jsonData)
});
})
代码看起来可以处理不同的“有效负载”,即通过正文中的 KPI 值区分响应。
如果您只有一个,它只会捕获第一个 KPI
cy.wait('@call')
。
它的工作原理是:
cy.intercept(...).as('call')
监听对 URL-to-be-matchedcy.wait('@call')
,每次调用发生一个 。cy.intercept(...).as('call')
function callHandler = ({ request, response }) => {
cy.fixture(`kpiId${request.body.kpiId}.json`).then(json => {
expect(request.body).to.deep.eq(jsonData)
})
}
cy.visit(react-app-url)
cy.wait('@call').then(callHandler) // first KPI
cy.wait('@call').then(callHandler) // second KPI
cy.wait('@call').then(callHandler) // third KPI