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.
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
});
O elemento em foco deve ser refletido em document.activeElement
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.