No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Aprovecha el precio especial y haz tu profesión a prueba de IA

Antes: $249

Currency
$209
Suscríbete

Termina en:

0 Días
6 Hrs
54 Min
35 Seg

Validando el body

7/17
Recursos

¿Cómo validar respuestas del servidor usando Cypress?

En el emocionante mundo del desarrollo de APIs, una de las tareas más cruciales es asegurarnos de que las respuestas del servidor sean correctas. Cypress nos ofrece la posibilidad de hacer estas validaciones de forma precisa y eficiente. La validación del body de la respuesta no solo nos permite asegurarnos de que el status code esté correcto, sino también que la data devuelta sea la esperada.

¿Qué necesitamos para empezar a validar?

Primero, debemos crear un archivo en nuestro proyecto donde escribiremos las pruebas. Utilizaremos funciones como describe e it para organizar y ejecutar nuestras pruebas en Cypress. Un ejemplo de prueba podría ser el siguiente:

describe('Probando el body', () => {
  it('debería validar el body, el status code y el content type', () => {
    cy.request('GET', '/employees/1').then((response) => {
      // Validación del status code
      expect(response.status).to.eq(200);
      
      // Validación del content type
      expect(response.headers['content-type']).to.include('application/json');
      
      // Validación de propiedades específicas del body
      expect(response.body.firstName).to.eq('Javier');
      expect(response.body.lastName).to.eq('Apellido');
    });
  });
});

¿Cómo validamos el status code y el content type?

La validación del status code es esencial para confirmar que la solicitud al servidor fue exitosa. Además, es igualmente importante verificar el tipo de contenido devuelto por el servidor. En el ejemplo anterior, vemos cómo usar expect para validar un status code de 200 y que el content type sea application/json.

¿Validar propiedades del body?

Es aquí donde Cypress brilla, permitiendo validar con exactitud las propiedades específicas de la respuesta. Si conocemos el nombre esperado, como en el ejemplo firstName, podemos comprobarlo directamente. También podemos hacerlo con cualquier propiedad del body que necesitemos verificar.

¿Qué pasa si queremos validar múltiples propiedades?

Podemos ir más allá validando varias propiedades y combinándolas con el status code y el content type. Esto nos da una visión integral del estado de la API y su respuesta.

Recomendaciones prácticas

  • Comienza validando propiedades básicas y, a medida que te sientas cómodo, añade más validaciones.
  • Utiliza los errores como oportunidades para aprender y mejorar la API.
  • Comparte tus pruebas con el equipo, promueve el feedback y mejora continuamente tus tests.

Al implementar estas estrategias en tus pruebas con Cypress, no solo estarás mejorando la calidad de tu código, sino que también estarás dando un paso firme hacia la excelencia en el desarrollo de APIs. ¡Sigue experimentando y perfeccionando tus habilidades!

Aportes 4

Preguntas 0

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

Request Polling

.
📚 Documentación
.

Se conoce al polling como el evento de uso continuo de recursos administrados.

.
En ocasiones, tenemos que utilizar múltiples pruebas sobre un caso de uso por el uso DRY o Don’t Repeat Yourself.
.
Para ello, una buena práctica en Cypress es la generación de módulos y uso de alias.

const findEmployees = (response: any) => {
    expect(response.status).to.eq(200)
    expect(response.body).to.be.an('array')
    response.body.forEach((employee: IEmployee) => {
        expect(employee).to.have.property('name')
        expect(employee).to.have.property('email')
    })
}

describe("Testing blocks", () => {
    it('should be success and valid response', function () {
        cy.request("/employees").as("employees")
        cy.get("@employees").should((response: any) => {
            expect(response.status).to.eq(200)
        })
        cy.get("@employees").should((response: any) => findEmployees(response))
    })
})

Si quereis validar el body completo en vez de con be.equal se hace con deep.equal para que compare internamente el objeto

Así con el its:

cy.request("employees/1").its("body").should("deep.equal", {
      id: 1,
      first_name: "Roseanna",
      last_name: "Ryland",
      email: "[email protected]",
      gender: "Female",
    });

Así con el then:

cy.request("employees/1").then((response) => {
      expect(response.body).to.be.deep.equal({
        id: 1,
        first_name: "Roseanna",
        last_name: "Ryland",
        email: "[email protected]",
        gender: "Female",
      });
    });

Muchas de estás pruebas también se puede generar con Postman, pero me parece interesante que puedan convivir con pruebas de UI en un sólo proyecto.

Probé a realizar las aserciones con el uso de expect() y con el .wrap() de esta manera:

describe('Probando el Body', () => {
  
  it('Validar el body', () => {

    cy.request('employees/1')
    .its('body')
    .its('first_name')
    .should('eq', 'David')

    cy.request('employees/1').then(res => {

      //Using expect
      expect(res.status).to.be.equal(200)
      expect(res.headers['content-type']).to.be.equal('application/json; charset=utf-8')
      expect(res.body['first_name']).to.be.equal('David')

      //Using wrap para obtener la sintaxis normal de cypress
      cy.wrap(res).its('status').should('eq', 200)
      cy.wrap(res).its('headers').its('content-type').should('include', 'application/json')
      cy.wrap(res).its('body').its('first_name').should('eq', 'David')

    })
    
  })


})