Как найти ответ JSON с помощью Cypress утверждений - PullRequest
1 голос
/ 20 января 2020

Учитывая приведенный ниже ответ API, я бы хотел установить точное местоположение определенного значения в структуре JSON. В моем случае имя из пикачу в формах :

"abilities": [
{
"ability": {
"name": "lightning-rod",
"url": "https://pokeapi.co/api/v2/ability/31/"
},
"is_hidden": true,
"slot": 3
},
{
"ability": {
"name": "static",
"url": "https://pokeapi.co/api/v2/ability/9/"
},
"is_hidden": false,
"slot": 1
}
],
"base_experience": 112,
"forms": [
{
"name": "pikachu",
"url": "https://pokeapi.co/api/v2/pokemon-form/25/"
}]

Я хотел бы расширить приведенный ниже фрагмент кода, чтобы не сканировать весь тело в целом, так как в ответе много имен , а точнее go через формы , чтобы точно определить его:

describe('API Testing with Cypress', () => {

  var baseURL = "https://pokeapi.co/api/v2/pokemon"

  beforeEach(() => {
      cy.request(baseURL+"/25").as('pikachu');
  });


it('Validate the pokemon\'s name', () => {
      cy.get('@pikachu')
          .its('body')
          .should('include', { name: 'pikachu' })
          .should('not.include', { name: 'johndoe' });
  });

Спасибо заранее!

Ответы [ 2 ]

1 голос
/ 21 января 2020

Чтобы добраться до «форм», нужно просто связать другую its(), но селектор «include», похоже, требует точного совпадения с объектом в массиве.

Так что это работает

it("Validate the pokemon's name", () => {
  cy.get("@pikachu") 
    .its("body")
    .its('forms')
    .should('include', { 
      name: 'pikachu', 
      url: 'https://pokeapi.co/api/v2/pokemon-form/25/' 
    })
})

или, если у вас просто есть имя,

it("Validate the pokemon's name", () => {
  cy.get("@pikachu") 
    .its("body")
    .its('forms')
    .should(items => {
      expect(items.map(i => i.name)).to.include('pikachu')
    })
})

, и вы можете утверждать отрицательное,

  .should(items => {
    expect(items.map(i => i.name)).to.not.include('johndoe')
  })
0 голосов
/ 21 января 2020

Можете ли вы попробовать приведенный ниже код и посмотреть, поможет ли он вашим ожиданиям. Из response вы можете получить имя, как показано ниже:

describe('API Testing with Cypress', () => {
    var baseURL = "https://pokeapi.co/api/v2/pokemon"
    beforeEach(() => {
        cy.request(baseURL+"/25").as('pikachu');
    });

  it('Validate the pokemon\'s name', () => {
        cy.get('@pikachu').then((response)=>{
            const ability_name = response.body.name;
            expect(ability_name).to.eq("pikachu");
        })    
    });
})

enter image description here

...