Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

349
Views
El objeto FormData está vacío a pesar de que se está configurando al intentar enviar un archivo pdf como una solicitud POST de FormData de varias partes en Cypress

Quiero enviar el archivo pdf como una solicitud POST.

La API acepta @RequestPart y @RequestParam :

 @RequestPart("file") MultipartFile file; @RequestParam(value = "document-types", required = false) Set<String> documentTypes;

Traté de hacerlo de esa manera:

 it('test', () => { cy.fixture(pdfFilePath, "binary").then(file => { const data = new FormData(); data.set('file', file); data.set('document-types', 'New Type'); cy.request({ method: "POST", url: '/api/v4/documents', headers: { accepts: "multipart/form-data", authorization: authString }, body: data }).then((response) => { expect(response.status).to.eq(200) }); }); });

Y cuando ejecuto esto me sale:

Status: 400 - Bad Request

En Cypress veo que el cuerpo de la solicitud enviada está vacío: Body: {}

ingrese la descripción de la imagen aquí

Cuando traté de depurar el código, veo que data se envían vacíos como se ve en la captura de pantalla adjunta:

ingrese la descripción de la imagen aquí

Y me pregunto por qué porque trato de configurar los data siguiendo estos pasos en las líneas 154 y 155 en la captura de pantalla anterior:

 data.set('file', file); data.set('document-types', 'New Type');

¿Que me estoy perdiendo aqui?

Versión de ciprés: 9.0.0

about 4 years ago · Juan Pablo Isaza
3 answers
Answer question

0

debe agregar formData, el código a continuación es solo un ejemplo:

 const formData = new FormData() formData.append('file', files[0]) formData.append('name', files[0].name)
about 4 years ago · Juan Pablo Isaza Report

0

No está vacío, debe utilizar data.entries() para ver el contenido.

Parece que la función cy.request() intenta convertir el objeto FormData en un objeto JSON, lo cual es incorrecto.

De la documentación de ciprés también debe hacer uso de la form: true .

Referencias:

  • https://developer.mozilla.org/en-US/docs/Web/API/FormData
  • https://xhr.spec.whatwg.org/#interface-formdata
about 4 years ago · Juan Pablo Isaza Report

0

Como @Christopher mencionó en la respuesta, data no estaban vacíos. Tuve que usar data.entries() o simplemente data.get() para ver el contenido.

Pero de todos modos, no pude hacer que ese código funcionara.

En cambio, seguí el enfoque presentado en este video de YouTube y funcionó.

 it.only('test', () => { function form_request(method, url, formData, done) { const xhr = new XMLHttpRequest(); xhr.open(method, url); xhr.setRequestHeader( "Authorization", "Basic YWRtaW46YWRtaW4=" ); xhr.onload = function () { done(xhr); }; xhr.onerror = function () { done(xhr); }; xhr.send(formData); } const fileName = "PdfFileName.pdf"; const method = "POST"; const url = '/api/v4/documents'; const fileType = "application/pdf" cy.fixture(pdfFilePath, "binary") .then((txtBin) => Cypress.Blob.binaryStringToBlob(txtBin)) .then((blob) => { const formData = new FormData(); formData.append("file", blob, fileName); formData.append("document-types", "New Type"); form_request(method, url, formData, function (response) { expect(response.status).to.eq(200); }) }); })
about 4 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!