Kami menggunakan tes lelucon dengan pola expect(document.activeElement).toBe(myElement)
untuk menentukan apakah suatu elemen mendapat fokus yang benar setelah interaksi. Setelah memutakhirkan ke lelucon 25 (jsdom 15) semua tes tersebut rusak, document.activeElement
tampaknya selalu nol. Begitu juga jika kita menjalankannya menggunakan jsDom 16.
Tim Jest menyarankan saya untuk membuka masalah di sini.
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
});
Elemen yang difokuskan harus tercermin dalam document.activeElement
Ini tidak mengikuti template masalah; ia menggunakan sintaks JavaScript yang tidak valid, dan merujuk pada fungsi yang tidak ditentukan.
Harap edit postingan untuk mengikuti template masalah, buat sampel yang dapat kami jalankan di Node.js sebagai satu file, lalu tambahkan komentar. Saya juga sangat menyarankan tautan ke jsbin atau yang serupa. Pada saat itu kami dapat membuka kembali dan mempertimbangkan masalah ini.
Menariknya, tanpa hal-hal yang berhubungan dengan enzim itu berfungsi dengan baik:
https://runkit.com/wojtekmaj/jsdom-15-2-16-document-activeelement-issue-ok
Namun, saya pikir itu mungkin terkait erat dengan #2586 yang masih merupakan regresi sejak v15.2:
https://runkit.com/wojtekmaj/jsdom-15-2-16-document-activeelement-issue
Terkait: enzymejs/enzyme#2337
Sepertinya jeda disebabkan oleh peningkatan ketat jsdom tentang tidak menyetel activeElement
ke elemen di luar document
. Perbaikannya ada di sisi klien, menggunakan argumen attachTo
ke panggilan mount.