2 votes

Comment rechercher dans la réponse JSON avec les assertions Cypress

En tenant compte de la réponse de l'API ci-dessous, je voudrais vérifier l'emplacement exact d'une certaine valeur dans une structure JSON. Dans mon cas, le nom de pikachu dans forms :

"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/"
}]

Je voudrais étendre le code ci-dessous pour ne pas analyser le corps entier en tant que tel, car il y a beaucoup de name's dans la réponse, mais plutôt passer par forms pour le localiser exactement :

describe('Test d'API avec Cypress', () => {

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

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

it('Valider le nom du Pokémon', () => {
      cy.get('@pikachu')
          .its('body')
          .should('include', { name: 'pikachu' })
          .should('not.include', { name: 'johndoe' });
  });

Merci d'avance!

1voto

soccerway Points 462

Pouvez-vous essayer le code ci-dessous et voir s'il aide avec votre attente. À partir de la response, vous pourriez obtenir le nom comme ci-dessous;

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

  it('Valider le nom du Pokemon', () => {
        cy.get('@pikachu').then((response)=>{
            const ability_name = response.body.name;
            expect(ability_name).to.eq("pikachu");
        })    
    });
})

entrer la description de l'image ici

1voto

Richard Matsen Points 7624

Arriver aux 'formulaires' est simplement une question de chaîner un autre its(), mais le sélecteur 'include' semble exiger une correspondance exacte sur l'objet dans le tableau.

Donc cela fonctionne

it("Valider le nom du Pokémon", () => {
  cy.get("@pikachu") 
    .its("body")
    .its('forms')
    .should('include', { 
      name: 'pikachu', 
      url: 'https://pokeapi.co/api/v2/pokemon-form/25/' 
    })
})

ou si vous avez juste le nom,

it("Valider le nom du Pokémon", () => {
  cy.get("@pikachu") 
    .its("body")
    .its('forms')
    .should(items => {
      expect(items.map(i => i.name)).to.include('pikachu')
    })
})

et vous pouvez affirmer le contraire,

  .should(items => {
    expect(items.map(i => i.name)).to.not.include('johndoe')
  })

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X