Wir verwenden Scherze-Tests mit dem Muster expect(document.activeElement).toBe(myElement)
, um festzustellen, ob ein Element nach einer Interaktion richtig fokussiert wurde. Nach dem Upgrade auf jest 25 (jsdom 15) sind alle diese Tests fehlgeschlagen, document.activeElement
scheint immer null zu sein. Dies ist auch der Fall, wenn wir es mit jsDom 16 ausführen.
Das Jest-Team hat mir geraten , hier ein Problem zu eröffnen.
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
});
Das fokussierte Element sollte sich in document.activeElement
widerspiegeln
Dies entspricht nicht der Problemvorlage; es verwendet eine ungültige JavaScript-Syntax und verweist auf undefinierte Funktionen.
Bitte bearbeiten Sie den Beitrag, um der Problemvorlage zu folgen, erstellen Sie ein Beispiel, das wir in Node.js als einzelne Datei ausführen können, und fügen Sie dann einen Kommentar hinzu. Ich würde auch dringend einen Link zu einem Jsbin oder ähnlichem empfehlen. Zu diesem Zeitpunkt können wir wieder öffnen und über dieses Thema nachdenken.
Interessanterweise funktioniert es ohne enzymbezogenes Zeug gut:
https://runkit.com/wojtekmaj/jsdom-15-2-16-document-activeelement-issue-ok
Ich denke jedoch, dass es eng mit #2586 verbunden sein könnte, das seit v15.2 immer noch eine Regression ist:
https://runkit.com/wojtekmaj/jsdom-15-2-16-document-activeelement-issue
Verwandte: Enzymjs/Enzym#2337
Sieht so aus, als ob der Bruch durch die zunehmende Strenge von jsdom verursacht wird, activeElement
auf ein Element außerhalb von document
. Die Fehlerbehebung erfolgt auf der Clientseite, indem das Argument attachTo
für den Mount-Aufruf verwendet wird.