Estoy usando cypress.io para probar una API (creada con Node.js). Quiero extraer valor de la respuesta JSON de la API y guardarlo en una variable.
Probé las soluciones mencionadas en los enlaces a continuación, pero no funcionó: Cypress: obtenga valor del cuerpo de respuesta json
A continuación se muestra el código que estoy usando para probar la API:
/// <reference types="cypress" /> describe("Testing Provider Catalog API", () => { it("Provider Catalog API GET Request", () => { cy.request('GET', 'v1/providers') .then((response) => { expect(response).to.have.property('status', 200) expect(response.body).to.not.be.null // expect(response.body.providers).to.have.length(1) }) cy.screenshot() }) it("Provider Catalog API POST Request", () => { const provider = { "type": "loadboard", "name": "123loadboard" }; cy.request('POST', 'v1/providers', provider) cy.screenshot() }) it("Provider Catalog API PUT Request", () => { const provider = { "type": "loadboard", "name": "123loadboard" }; cy.request('PUT', 'v1/providers/61a54a66a2b734859481931c', provider) cy.screenshot() }) it("Provider Catalog API DELETE Request", () => { cy.request('DELETE', 'v1/providers/61a68e7ca6011e605029191b') cy.screenshot() }) })A continuación se muestra el código que estoy usando
var providerId cy.wait('@newObject').then((response) => { expect(response.status).to.eq(201) expect(response.responseBody).to.have.property('_id') const body = (response.responseBody) providerId = body['_id'] }) cy.get(someInput).type(newId)Salida de muestra de la API:
{ "_id":"61a54ba1a2b7348594819323", "type":"loadboard", "name":"123loadboard", "__v":0 }Quiero almacenar el valor de _id en una variable y usarlo más tarde. Lo he estado intentando durante los últimos días y nada parece funcionar. Alguien puede ayudarme por favor. Gracias por adelantado.
La forma recomendada de usar variables con ciprés es con alias. Ver documentos aquí .
En su código, puede wrap() su _id y guardarlo como un alias, luego llamar a su alias en otro lugar de su código:
cy.wait('@newObject').then((response) => { expect(response.status).to.eq(201) expect(response.responseBody).to.have.property('_id') cy.wrap(response.responseBody._id).as('newId') }) // then later in your code use: cy.get('@newId').then((newId) => { cy.get(someInput).type(newId) }) También puede type() su _id dentro de su wait() :
cy.wait('@newObject').then((response) => { expect(response.status).to.eq(201) expect(response.responseBody).to.have.property('_id') cy.get(someInput).type(response.responseBody._id) }) O puede usar el objeto de entorno global Cypress.env() . Ver documentos aquí .
cy.wait('@newObject').then((response) => { expect(response.status).to.eq(201) expect(response.responseBody).to.have.property('_id') Cypress.env('newId', response.responseBody._id) }) // then later in your code use: cy.get(someInput).type(Cypress.env('newId'))