Validación de Respuestas HTTP en APIs con Cypress
Clase 7 de 17 • Curso de Automatización de Pruebas de Backend con Cypress
Contenido del curso
Clase 7 de 17 • Curso de Automatización de Pruebas de Backend con Cypress
Contenido del curso
Emmanuel Rodríguez
Jairo Campos Ruiz
David Burgos
Javier Fuentes Mora
David steven Abril Pulecio
Geovanni Atavales Quiroga
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: "rryland0@omniture.com", 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: "rryland0@omniture.com", gender: "Female", }); });
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') }) }) })
y que te pareció David ? cual te gusto más ?
Excelente aporte, gracias pero la seccion:
expect(res.headers['content-type']).to.be.equal('application/json; charset=utf-8')
No funcionó, asi que removi el charset como correccion para la version de cypress 2025 quedaria asi:
expect(res.headers['content-type']).to.be.equal('application/json')
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.