我在 API 调用中请求了一个 POST 方法来进行登录测试,并收到了主体中包含许多对象的数组。我想使用 its 方法访问特定的客户端令牌,但它位于数组内部,我无法完全弄清楚如何访问,因为该数组没有“名称”。
cypress中的请求:
it('Logar em um cliente com um usuário', function () {
cy.request({
method: 'POST',
url: 'https://localhost:44332/api/Users/LoginDefault',
body: {
"username": "user",
"password": "password"
}
}).its('body.token').then(res => console.log(res))
身体反应(恢复):
[
{
"user": "user1",
"token": "token1"
},
{
"user": "user2",
"token": "token2"
},
{
"user": "user3",
"token": "token3"
}
]
解决方案 它的工作原理是这样的:
it('Logar em um cliente com um usuário', function () {
cy.request({
method: 'POST',
url: 'https://localhost:44332/api/Users/LoginDefault',
body: {
"username": "user",
"password": "password"
}
}).its('body').then((res) => {
const dadoToken = res[1].token
expect(dadoToken).not.to.be.empty
})
})
在这种情况下,主体响应是一个数组,因此您需要做的就是导航该数组。
返回值为
res
,因此在这种情况下,它将是 res[i].token
,其中 i
是您需要的数组中的对象。
例如
res[2].token
将是“token3”。
以 .NET 中的标准 Web API 项目为例,Cypress 端的 JSON 响应具有属性
body
,因此您不能简单地使用 res[i]
,而应该使用 res.body[i]
。然后您可以编写以下示例测试:
it('supports getting data from API', () => {
cy.request('http://localhost:5186/api/users').as('users')
cy.get('@users').should((response) => {
console.log(response)
expect(response).to.have.property('status')
expect(response.status).to.eq(200)
expect(response).to.have.property('body')
expect(response.body).to.be.an('Array')
expect(response.body).to.have.length.of.at.least(1)
expect(response.body[0]).to.have.property('user')
expect(response.body[0].pesel).eq('user1')
})
})