从同一 URL 获得不同的响应

问题描述 投票:0回答:1

我正在开发一个 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)
  });
})
reactjs cypress cypress-intercept
1个回答
0
投票

代码看起来可以处理不同的“有效负载”,即通过正文中的 KPI 值区分响应。

如果您只有一个,它只会捕获第一个 KPI

cy.wait('@call')

它的工作原理是:

  • 一个
    cy.intercept(...).as('call')
    监听对 URL-to-be-matched
  • 的所有调用
  • 多个
    cy.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
© www.soinside.com 2019 - 2024. All rights reserved.