es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

La librería de pruebas de Vue no volverá a renderizar el DOM cuando cambie el estado.

Tengo un componente con un botón de edición directo. El botón de edición llama a un método que establece isEditing en verdadero.

Hay algunos elementos de entrada con v-if=”isEditing”, por lo que estoy probando que esos elementos de entrada sean visibles después de hacer clic en el botón de edición.

Cuando mi prueba ejecuta fireEvent.click(screen.getByRole(‘& # 39; link & # 39 ;, {name: ‘& # 39; Edit & # 39;})), se está actualizando isEditing a verdadero (según mis mensajes de console.log antes/después del evento .click ), pero no parece volver a representar los componentes dentro de la prueba (basado en el DOM representado en mi terminal después de que getByRole falla).

Funciona según lo esperado en el navegador, pero parece que no actualiza el DOM para la especificación. Estoy usando Vue2, Vue Testing Library y Jest.

Implementación:



métodos: {
startEdit: () => {
this.isEditing = true
}
}

Especificación:

describe('FormComponent', () => {
  beforeEach(() => {
    render(FormComponent)
  })

it('muestra etiquetas de entrada' () => {
    fireEvent.click(screen.getByRole('link', {name: 'Editar'}))
    expect(screen.getByRole('input')).toBeInTheDocument()
  })

})
Tags:  , ,

Answer

  1. Avatar for davy.ai

    Solución:
    Para que se actualice el DOM en la especificación, es necesario usar el método Vue.nextTick. Esto permitirá que el DOM se actualice después de que se haya cambiado el estado de isEditing.

    La especificación debería actualizarse de la siguiente manera:

    describe('FormComponent', () => {
      beforeEach(() => {
        render(FormComponent)
      })
    
    it('displays input tags', () => {
        fireEvent.click(screen.getByRole('link', {name: 'Edit'}))
        Vue.nextTick(() => {
          expect(screen.getByRole('input')).toBeInTheDocument()
        })
      })
    
    })
    

Comments are closed.