Jsdom: document.activeElement всегда имеет значение null после обновления до jsdom 15/16 (шутка 25)

Созданный на 27 мар. 2020  ·  3Комментарии  ·  Источник: jsdom/jsdom

Основная информация:

Мы используем шуточные тесты с шаблоном expect(document.activeElement).toBe(myElement) , чтобы определить, правильно ли сфокусировался элемент после взаимодействия. После обновления до jest 25 (jsdom 15) все такие тесты сломались, document.activeElement всегда оказывается нулевым. Это также верно, если мы запустим его с помощью jsDom 16.

Команда Jest посоветовала мне открыть вопрос здесь.

  • Версия Node.js: 10.19.0
  • версия jsdom: 15 и 16
  • версия шутки: 25.1.0

Минимальный репродукционный случай

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

Как подобный код ведет себя в браузерах?

Сфокусированный элемент должен быть отражен в document.activeElement

Все 3 Комментарий

Это не соответствует шаблону выпуска; он использует недопустимый синтаксис JavaScript и ссылается на неопределенные функции.

Пожалуйста, отредактируйте сообщение, чтобы следовать шаблону задачи, создав образец, который мы можем запустить в Node.js в виде одного файла, а затем добавьте комментарий. Я также настоятельно рекомендую ссылку на jsbin или аналогичный. Тогда мы сможем вновь открыться и рассмотреть этот вопрос.

Интересно, что без энзимов все работает нормально:

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

Тем не менее, я думаю, что это может быть тесно связано с # 2586, который все еще является регрессом с версии 15.2:

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

Связанный: энзимы/энзим#2337

Похоже, разрыв вызван растущей строгостью jsdom в отношении того, чтобы не устанавливать activeElement для элемента вне document . Исправление находится на стороне клиента, используя аргумент attachTo для вызова монтирования.

Была ли эта страница полезной?
0 / 5 - 0 рейтинги