Jsdom: document.activeElement siempre es nulo después de actualizar a jsdom 15/16 (broma 25)

Creado en 27 mar. 2020  ·  3Comentarios  ·  Fuente: jsdom/jsdom

Información básica:

Usamos pruebas de broma con el patrón expect(document.activeElement).toBe(myElement) para determinar si un elemento se enfocó correctamente después de una interacción. Después de actualizar a jest 25 (jsdom 15), todas esas pruebas fallaron, document.activeElement parece ser siempre nulo. También es el caso si lo ejecutamos usando jsDom 16.

El equipo de Jest me aconsejó que abriera un problema aquí.

  • Versión de Node.js: 10.19.0
  • versión jsdom: 15 y 16
  • versión de broma: 25.1.0

Caso de reproducción mínima

import * as React from 'react';

it('should find active element', () => {
    const wrapper = mount(<input />);
    const inputNode = wrapper.find('input').getDOMNode();
    expect(document.activeElement).not.toBe(inputNode);
    inputNode.focus();
    expect(document.activeElement).toBe(inputNode); // fails here with expected being null
});

¿Cómo se comporta un código similar en los navegadores?

El elemento enfocado debe reflejarse en document.activeElement

Todos 3 comentarios

Esto no sigue la plantilla de problema; utiliza una sintaxis de JavaScript no válida y hace referencia a funciones no definidas.

Edite la publicación para seguir la plantilla del problema, produciendo una muestra que podamos ejecutar en Node.js como un solo archivo, y luego agregue un comentario. También sugeriría encarecidamente un enlace a un jsbin o similar. En ese momento podemos reabrir y considerar este problema.

Curiosamente, sin cosas relacionadas con enzimas, funciona bien:

https://runkit.com/wojtekmaj/jsdom-15-2-16-document-activeelement-issue-ok

Sin embargo, creo que podría estar estrechamente relacionado con el n. ° 2586, que sigue siendo una regresión desde la versión 15.2:

https://runkit.com/wojtekmaj/jsdom-15-2-16-document-activeelement-issue

Relacionado: enzimajs/enzima#2337

Parece que la ruptura es causada por el rigor cada vez mayor de jsdom acerca de no establecer activeElement en un elemento fuera de document . La solución está en el lado del cliente, usando el argumento attachTo para la llamada de montaje.

¿Fue útil esta página
0 / 5 - 0 calificaciones

Temas relacionados

potapovDim picture potapovDim  ·  4Comentarios

camelaissani picture camelaissani  ·  4Comentarios

khalyomede picture khalyomede  ·  3Comentarios

cg433n picture cg433n  ·  3Comentarios

drewish picture drewish  ·  4Comentarios