Jsdom: document.activeElement ist nach dem Upgrade auf jsdom 15/16 (jest 25) immer null

Erstellt am 27. März 2020  ·  3Kommentare  ·  Quelle: jsdom/jsdom

Basisinformation:

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.

  • Node.js-Version: 10.19.0
  • jsdom-Version: 15 und 16
  • Witzversion: 25.1.0

Minimaler Reproduktionsfall

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
});

Wie verhält sich ähnlicher Code in Browsern?

Das fokussierte Element sollte sich in document.activeElement widerspiegeln

Alle 3 Kommentare

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.

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen