Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

130
Visualizações
Prueba de unidad de escritura para el componente que usa un servicio

Actualmente estoy trabajando en una prueba unitaria de un proyecto VueJS y me gustaría crear una prueba my-component.spec.js (con Jest) para un my-component.vue que usa un servicio myService con la opción de inject . La prueba en sí no es importante. Se trata sobre todo de aprender a simular correctamente un componente que utiliza un servicio. Después de investigar mucho, traté de escribir mi prueba que creo que está en el camino correcto, pero parece que no puedo hacer que funcione por completo. Aquí está el código con 3 console.log en el archivo de prueba:

mock.js (archivo que contiene un método simulado del servicio myService ):

 export default function getAllInfos() { return [ {"id": "myId", "name": "myName"} ]; }

my-component.spec.js :

 import {mount} from "@vue/test-utils"; import MyComponent from "./my-component.vue"; import getAllInfos from "./mock"; describe("MyComponent", () => { it("returns the correct value for getAllInfos() method", () => { const wrapper = mount(MyComponent, { "provide": { myService() { return { "mock": { "getAllInfos": getAllInfos() } }; }, }, data() { return { "infos": [] }; } }); console.log("getAllInfos = ", wrapper.vm.$options.provide.myService().mock.getAllInfos); const test = wrapper.vm.$options.provide.myService().mock.getAllInfos; console.log("test = ", test); wrapper.setData({"infos": test}); console.log("infos = ", wrapper.vm.$options.data().infos); expect(wrapper.vm.$options.data().infos).toEqual([ {"id": "myId", "name": "myName"} ]); }); });

Creo que estoy en el camino correcto porque cuando ejecuto el npm run test:unit , los primeros 2 console.log devuelven el resultado esperado:

 getAllInfos = [{id: 'myId', name: 'myName'}] test = [{id: 'myId', name: 'myName'}]

Sin embargo, el 3er console.log me parece extraño:

 infos = []

Esto significa que los datos de infos no están asignados por la constante de test , cuyo contenido es correcto.

¿Alguien tiene una solución para este problema?

about 4 years ago · Juan Pablo Isaza
1 Respostas
Responde à pergunta

0

Si echa un vistazo más de cerca a los documentos ( setData | Vue Test Utils ), entonces puede ver una pequeña pero significativa diferencia en su código:

 // your code: /* ... */ it("returns the correct value for getAllInfos() method", () => { /* ... */ wrapper.setData({"infos": test}); /* ... */ }); /* ... */ // code in docs: /* ... */ test('setData demo', async () => { /* ... */ await wrapper.setData({ foo: 'bar' }) /* ... */ })

Sí, la diferencia es que en los documentos, la prueba es una función async y se espera el setData . Creo que esta es la fuente de tu problema.

También puede intentar (pero esto es un poco una solución):

 import { createLocalVue, mount } from "@vue/test-utils"; /* ... */ const localVue = createLocalVue() /* ... */ wrapper.setData({"infos": test}); await localVue.nextTick() /* ... */

Fuente para localVue aquí

about 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda