Cypress:在 API 请求中访问数组内的对象

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

我在 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
        }) 
    })
arrays json cypress
2个回答
3
投票

在这种情况下,主体响应是一个数组,因此您需要做的就是导航该数组。

返回值为

res
,因此在这种情况下,它将是
res[i].token
,其中
i
是您需要的数组中的对象。

例如

res[2].token
将是“token3”。


1
投票

以 .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')
    })
  })
© www.soinside.com 2019 - 2024. All rights reserved.