如何在 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}) => {
...
在网络调用中我们有一个请求 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}) => {
...