Jsdom: document.activeElement é sempre nulo após a atualização para jsdom 15/16 (jest 25)

Criado em 27 mar. 2020  ·  3Comentários  ·  Fonte: jsdom/jsdom

Informação básica:

Usamos testes jest com o padrão expect(document.activeElement).toBe(myElement) para determinar se um elemento foi corretamente focado após uma interação. Depois de atualizar para o jest 25 (jsdom 15) todos esses testes falharam, document.activeElement parece ser sempre nulo. Também é o caso se o executarmos usando jsDom 16.

A equipe do Jest me aconselhou a abrir um problema aqui.

  • Versão do Node.js: 10.19.0
  • versão jsdom: 15 e 16
  • versão de brincadeira: 25.1.0

Estojo de reprodução 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
});

Como um código semelhante se comporta em navegadores?

O elemento em foco deve ser refletido em document.activeElement

Todos 3 comentários

Isso não segue o modelo de problema; ele usa sintaxe JavaScript inválida e faz referência a funções indefinidas.

Edite a postagem para seguir o modelo de problema, produzindo uma amostra que podemos executar no Node.js como um único arquivo e, em seguida, adicione um comentário. Eu também sugeriria fortemente um link para um jsbin ou similar. Nesse momento, podemos reabrir e considerar essa questão.

Curiosamente, sem coisas relacionadas a enzimas, funciona bem:

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

No entanto, acho que pode estar fortemente acoplado ao #2586, que ainda é uma regressão desde a v15.2:

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

Relacionado: enzimajs/enzima#2337

Parece que a quebra é causada pelo crescente rigor do jsdom sobre não definir activeElement para um elemento fora do document . A correção está no lado do cliente, usando o argumento attachTo para a chamada de montagem.

Esta página foi útil?
0 / 5 - 0 avaliações

Questões relacionadas

Progyan1997 picture Progyan1997  ·  3Comentários

khalyomede picture khalyomede  ·  3Comentários

philipwalton picture philipwalton  ·  4Comentários

jhegedus42 picture jhegedus42  ·  4Comentários

machineghost picture machineghost  ·  4Comentários