如何在 cypress 的网络调用中验证特定 url 的有效负载中的 json

How to validate json in payload for a specific url in network calls in cypress

在网络调用中我们有一个请求 url https://xyz.com.testqa.com/site/v3/userPref/
有效负载有一个不同的选项卡,我想在下面验证操作 ID json

c: 5232
d: {noticeId: 32029, companyId: 5232, actionId: 11, regulationId: 2, regulationType: 1, 
consentGiven: 1,…}
actionId: 11

我可以使用以下代码断言上述 url 的状态代码:

cy.intercept('POST','privacycollector.test.com/site/v3/userPref/',(req) => { }).as('getSettings') 
cy.wait('@getSettings').then(({ response }) => { expect(response.statusCode).to.eq(204) }) 
cy.wait('@getSettings').then(({ request }) => { const requestBody = request.body cy.log(requestBody) })

但我无法验证请求负载中的 json。
这些电话来自网络选项卡

您应该检查具体的 属性:

 cy.wait('@getSettings').then((response) => { 
   expect(response.d).to.have.property('actionId',11);
 })

首先,命令的顺序不正确。您应该设置 cy.intercept() 来监听网络调用 ,然后 触发这些调用。

第二,如果只有一个 POST 你只能 cy.wait('@getSettings') 一次。 您必须在第一个回调中进行所有检查。

// first set up cy.intercept listener
cy.intercept('POST','privacycollector.test.com/site/v3/userPref/', (req) => {})
  .as('getSettings') 

// now trigger the network calls
cy.visit(...)

// wait for catch
cy.wait('@getSettings').then((interception) => { 

  expect(interception.response.statusCode).to.eq(204)

  const requestBody = interception.request.body 
  console.log(interception.request.body) 

  expect(interception.request.body.c).to.eq('5232')

  expect(interception.request.body.d.actionId).to.eq('11')

})

或者解构参数中的request和response

// wait for catch
cy.wait('@getSettings').then(({request, response}) => { 
  ...