نستخدم اختبارات الدعابة بنمط expect(document.activeElement).toBe(myElement)
لتحديد ما إذا كان العنصر قد تم تركيزه بشكل صحيح بعد التفاعل. بعد الترقية إلى jest 25 (jsdom 15) ، تعطلت جميع هذه الاختبارات ، يبدو أن document.activeElement
دائمًا فارغ. هذا هو الحال أيضًا إذا قمنا بتشغيله باستخدام jsDom 16.
نصحني فريق Jest بفتح مشكلة هنا.
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
هذا لا يتبع قالب القضية ؛ يستخدم بناء جملة 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
لاستدعاء التحميل.