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í.
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
});
El elemento enfocado debe reflejarse en document.activeElement
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.