Estoy usando VueJS y Cypress. Tengo un modal donde envío un FormData con diferentes rellenos y un archivo:
var formData = new FormData(); formData.append("document_file", this.documentFile); formData.append("comments", this.comments.value); ...La forma en que lo subo:
this.$http.post('http://localhost:8081/api/upload',formData,{emulateJSON: true},{ header:{ "Content-Type":"multipart/form-data" }, }).then(function(response) { // ... Code }).catch((err) => { // .. Code }); } Quiero usar Cypress para probar los parámetros. Ahora, cuando no uso el archivo del documento en formData , tengo los siguientes métodos para analizar los multipart/form-data; boundary=--- :
function parse(request) { console.log("request"); console.log(request); const headers = request.headers; const body = request.body; const content_type = headers['content-type']; expect(content_type, 'boundary').to.match(/^multipart\/form-data; boundary=/); const boundary = content_type.split('boundary=')[1]; const values = p(boundary, body); return values; } function p(boundary, body) { expect(boundary, 'boundary').to.be.a('string'); expect(body, 'body').to.be.a('string'); const parts = body.split(`--${boundary}`).map((s) => s.trim()).filter((s) => s.startsWith('Content-Disposition: form-data;')); const result = {}; parts.forEach((part) => { const lines = part.split(/\r?\n/g); const key = lines[0].match(/name="(.+)"/)[1]; result[key] = (lines.length >= 2) ? lines[2].trim() : ""; }); return result; } Que funcionan muy bien. Pero cuando subo el archivo, obtengo un request.body diferente:
La forma en que estoy tratando de probar:
cy.get('@createDocument').then((interception) => { assert.isNotNull(interception); const values = parse(interception.request); assert.isTrue(values.comments === ""); });¿Cómo puedo manejar esto?