Quiero enviar una solicitud POST en Cypress que active la validación para rechazar la solicitud
Según Postman, el cuerpo de la respuesta se ve así:
"code": "validation_error", "message": "Validation error, please see fields property for details", "fields": { "TariffData[rate_gp]": " Invalid rate_gp. Expected: 9.35. Imported: 19.35" }Estoy interesado en la sección "campos", así que traté de afirmar con este código:
const api_key = require('../../fixtures/contracts/api_test_client1.json') const body1 = require('../../fixtures/contracts/body_test_client1.json') describe('test POST/client validation', () => { it('send POST/client request', function () { cy.request({ method: 'POST', url: Cypress.env('staging_url') + '/service/clients', headers: { 'API-KEY': api_key, }, body: body1, failOnStatusCode:false }) .then(response => { expect(response.status).to.eq(400) expect(response.body.fields).to.contain('"TariffData[rate_gp]": " Invalid rate_gp. Expected: 9.35. Imported: 19.35"') }) )} )}Sin embargo, esto conduce a un error:
Error de aserción
el objeto probado debe ser una matriz, un mapa, un objeto, un conjunto, una cadena o un conjunto débil, pero el objeto dado
Sí, el mensaje de error termina ahí. ¿Alguna idea de cómo puedo afirmar que la respuesta contiene este mensaje?
Creo que solo desea presentar el valor esperado como un objeto, no como una cadena
expect(response.body.fields) .to.contain({ "TariffData[rate_gp]": " Invalid rate_gp. Expected: 9.35. Imported: 19.35" })Si observa la API de docs chaijs que muestran, por ejemplo
expect({a: 1, b: 2, c: 3}).to.include({a: 1, b: 2}); y contain es sinónimo de include
También puede intentar to.deep.equal , ya que parece que está especificando la propiedad de fields totales
expect(response.body.fields) .to.deep.eq({ "TariffData[rate_gp]": " Invalid rate_gp. Expected: 9.35. Imported: 19.35" })