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

218
Views
Cómo probar con jest y vue-test-utils simular archivo de carga

Uso bromas con vue-test-utils y quiero un método de prueba para cargar archivos. Este método en el componente de archivo vue.

 async uploadFiles(file){ this.$refs.iconUpload.setAttribute('data-load', 'loading') let formData = new FormData(); formData.append('image', file); try{ const result = await fetch('/upload', { method: 'POST', body: formData, }) const data = await result.json(); if(data.status){ this.$refs.iconUpload.setAttribute('data-load', 'success') this.$refs.btnClear.style.display = 'none'; this.$refs.btnGoBack.style.display = 'none'; this.uploadDone = true; }else { this.showSpecialError(this.$refs.elseError) } }catch (e){ this.showSpecialError(this.$refs.elseError) return null } }

y quiero probarlo con resolver y rechazar

 const file = { size: 500, type: 'image/png', name: 'image.png }; const event = { target: { files: [file], }, }; global.fetch = jest.fn(() => Promise.resolve({ json: () => Promise.resolve({ data }) })); test('the function of sending the file returns the required response on a successful response', async () => { const result = await wrapper.vm.uploadFiles(event) expect(result).toEqual(file) })

Pero la prueba siempre devuelve nulo

ingrese la descripción de la imagen aquí

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

0

En la prueba, está esperando el resultado de la función uploadFiles . Pero uploadFiles no return el archivo, como parece esperar su prueba.

Lo haría si, al final del bloque try {} , agregara:

 return data;

Debido a que uploadFiles es async , el valor devuelto se incluiría automáticamente en una promesa. Por lo tanto, sería equivalente a devolver Promise.resolve(data) en una función síncrona.

Pero devolver data al final del bloque try{} no es lo que deberías hacer, en realidad.

Dentro de su método de componente, lo único que está comprobando de la respuesta de la llamada /upload es si se establece o no un status verdadero en la respuesta ( if (data.status) ). Lo cual es simplemente incorrecto, porque un estado de 404 (no encontrado) es veraz. También lo es un estado de 500 (error del servidor). Todos los estados de error del servidor, de hecho, son verdaderos, porque todos son números finitos y positivos.

Volviendo a la prueba, tienes dos opciones:

a)
si desea probar el código del componente actual (que no debería), todo lo que necesita probar es si wrapper.vm.uploadDone se establece en true cuando la búsqueda devuelve una respuesta que contiene un valor de estado verdadero.

Esta prueba pasaría con su componente actual:

 global.fetch = jest.fn(() => Promise.resolve({ json: () => Promise.resolve({ status: 404 }) })); test('uploadDone gets set to true when receiving a truthy response from /upload', async () => { expect(wrapper.vm.uploadDone).toBe(false); await wrapper.vm.uploadFiles({ size: 500, type: 'image/png', name: 'image.png' }); expect(wrapper.vm.uploadDone).toBe(true); })

Pero, en realidad, sus uploadFiles no deberían configurar uploadDone cuando reciben un resultado con un estado diferente a 200 .

Mi consejo para ti es que vayas por la alternativa:

b)
pida ayuda a un miembro superior de su equipo, que podría explicar en detalle lo anterior y ayudaría a reescribir la función uploadFiles . Hasta que ese método no haga lo que debería, no tiene mucho sentido escribir pruebas para él.

Las pruebas están ahí para asegurarse de que la aplicación se comporte como se espera, tanto cuando los sistemas externos fallan como cuando funcionan como se espera.
Mi impresión es que su aplicación actualmente no funciona según las expectativas.

Así que escribe la prueba de acuerdo con las expectativas reales (del cliente). Y luego escribir el código que supera todas las expectativas.

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!