الفرق بين المراجعتين لصفحة: «React/test utils»
Kinan-mawed (نقاش | مساهمات) لا ملخص تعديل |
Kinan-mawed (نقاش | مساهمات) لا ملخص تعديل |
||
سطر 11: | سطر 11: | ||
تزيد أدوات الاختبار <code>ReactTestUtils</code> من سهولة اختبار مكوّنات React في إطار عمل الاختبار الذي تريده. يستخدم Facebook الأداة Jest لاختبار JavaScript بسهولة. تعلم كيفية البدء مع Jest عبر درس React في موقع Jest. | تزيد أدوات الاختبار <code>ReactTestUtils</code> من سهولة اختبار مكوّنات React في إطار عمل الاختبار الذي تريده. يستخدم Facebook الأداة Jest لاختبار JavaScript بسهولة. تعلم كيفية البدء مع Jest عبر درس React في موقع Jest. | ||
ملاحظة: أطلقت Airbnb أداة اختبار تُدعى Enzyme والتي تجعل من السهل التعامل مع ناتج مكوّناتك. إن قرّرت استخدام أداة اختبار أخرى مع Jest فقد تستحق تجربتها من هنا. | '''ملاحظة:''' أطلقت Airbnb أداة اختبار تُدعى Enzyme والتي تجعل من السهل التعامل مع ناتج مكوّناتك. إن قرّرت استخدام أداة اختبار أخرى مع Jest فقد تستحق تجربتها من هنا. | ||
هنالك أداة بديلة أخرى تُدعى react-testing-library مُصمَّمة لتمكين وتشجيع كتابة اختبارات لاستخدامها مع مكوّناتك بينما يستخدمها المستخدم النهائي. تعمل أيضًا مع أي مُشغِّل اختبار. | هنالك أداة بديلة أخرى تُدعى <code>react-testing-library</code> مُصمَّمة لتمكين وتشجيع كتابة اختبارات لاستخدامها مع مكوّناتك بينما يستخدمها المستخدم النهائي. تعمل أيضًا مع أي مُشغِّل اختبار. | ||
== مرجع == | == مرجع == | ||
سطر 20: | سطر 20: | ||
عند كتابة وحدات اختبار لمكتبة React يكون التصيير السطحي مفيدًا لك. يُتيح لك التصيير السطحي تصيير مكوّن على عمق مستوى واحد وتوضيح الحقائق حول ما يُعيده تابع التصيير، بدون القلق حول سلوك المكوّنات الأبناء والتي لم تُصيَّر أو ينشأ عنها نسخة. لا يحتاج ذلك إلى DOM. | عند كتابة وحدات اختبار لمكتبة React يكون التصيير السطحي مفيدًا لك. يُتيح لك التصيير السطحي تصيير مكوّن على عمق مستوى واحد وتوضيح الحقائق حول ما يُعيده تابع التصيير، بدون القلق حول سلوك المكوّنات الأبناء والتي لم تُصيَّر أو ينشأ عنها نسخة. لا يحتاج ذلك إلى DOM. | ||
ملاحظة: انتقل التصيير السطحي إلى react-test-renderer/shallow. تعلم المزيد حول التصيير السطحي في صفحة التوثيق الخاصّة به. | ملاحظة: انتقل التصيير السطحي إلى <code>react-test-renderer/shallow</code>. تعلم المزيد حول التصيير السطحي في صفحة التوثيق الخاصّة به. | ||
=== أدوات أخرى === | === أدوات أخرى === | ||
سطر 47: | سطر 47: | ||
ReactTestUtils.Simulate.keyDown(node, {key: "Enter", keyCode: 13, which: 13}); | ReactTestUtils.Simulate.keyDown(node, {key: "Enter", keyCode: 13, which: 13}); | ||
</syntaxhighlight>'''ملاحظة:''' يجب عليك تزويد أي خاصيّة حدث تستخدمها في مكوّنك (مثل | </syntaxhighlight>'''ملاحظة:''' يجب عليك تزويد أي خاصيّة حدث تستخدمها في مكوّنك (مثل <code>KeyCode</code>، و <code>Which</code>، إلخ...) لأنّ React لا تُنشِئ أي من هذه الخاصيّات لأجلك. | ||
==== <code>renderIntoDocument()</code> ==== | ==== <code>renderIntoDocument()</code> ==== | ||
<syntaxhighlight lang="javascript"> | <syntaxhighlight lang="javascript"> | ||
renderIntoDocument(element) | renderIntoDocument(element) | ||
</syntaxhighlight> | </syntaxhighlight>تصيير عنصر React في عقدة DOM منفصلة في المستند. تتطلّب هذه الدالة قابلية الوصول إلى DOM. | ||
'''ملاحظة:''' تحتاج إلى أن تكون <code>window</code>، و <code>window.document</code>، و <code>window.document.createElement</code> متوفرة لديك بشكل عام (global) قبل استيراد React، وإلّا ستعتقد React أنّها لا تستطيع الوصول إلى DOM ولن تعمل توابع مثل <code>setState</code>. | |||
==== <code>mockComponent()</code> ==== | |||
<syntaxhighlight lang="javascript"> | |||
mockComponent( | |||
componentClass, | |||
[mockTagName] | |||
) | |||
</syntaxhighlight>تمرير وحدة المكوّن المحاكي إلى هذا التابع لتزويد المكوّن بتوابع مفيدة، فبدلًا من التصيير الاعتيادي سيصبح المكوّن عنصر <code>div</code> بسيط (أو أي عنصر آخر ندخله ضمن الوسيط <code>mockTagName</code>) يحتوي على أي مكوّن ابن نعطيه له. | |||
'''ملاحظة:''' <code>mockComponent()</code> هي واجهة برمجة تطبيق قديمة. نوصي باستخدام التصيير السطحي أو <code>jest.mock()</code> بدلًا من ذلك. | |||
==== <code>isElement()</code> ==== | |||
<syntaxhighlight lang="javascript"> | |||
isElement(element) | |||
</syntaxhighlight>يُعيد القيمة <code>true</code> إن كان الوسيط <code>element</code> عبارة عن عنصر React. | |||
==== <code>isElementOfType()</code> ==== | |||
<syntaxhighlight lang="javascript"> | |||
isElementOfType( | |||
element, | |||
componentClass | |||
) | |||
</syntaxhighlight>يُعيد القيمة <code>true</code> إن كان الوسيط <code>element</code> عبارة عن عنصر React نوعه هو <code>componentClass</code>. | |||
==== <code>isDOMComponent()</code> ==== | |||
<syntaxhighlight lang="javascript"> | |||
isDOMComponent(instance) | |||
</syntaxhighlight>يُعيد القيمة <code>true</code> إن كان الوسيط <code>instance</code> هو مكوّن DOM (مثل <code>div</code> أو <code>span</code>). | |||
==== <code>isCompositeComponent()</code> ==== | |||
<syntaxhighlight lang="javascript"> | |||
isCompositeComponent(instance) | |||
</syntaxhighlight>يُعيد القيمة <code>true</code> إن كان الوسيط <code>instance</code> عبارة عن مكوّن مُعرَّف من قبل المستخدم كالأصناف أو الدوال. | |||
==== <code>isCompositeComponentWithType()</code> ==== | |||
<syntaxhighlight lang="javascript"> | |||
isCompositeComponentWithType( | |||
instance, | |||
componentClass | |||
) | |||
</syntaxhighlight>يُعيد القيمة <code>true</code> إن كان الوسيط <code>instance</code> عبارة عن مكوّن من النوع <code>componentClass</code>. | |||
==== <code>findAllInRenderedTree()</code> ==== | |||
<syntaxhighlight lang="javascript"> | |||
findAllInRenderedTree( | |||
tree, | |||
test | |||
) | |||
</syntaxhighlight>التنقل عبر مكوّنات شجرة المكوّنات وجمع كل المكوّنات حيث يكون <code>test(component)</code> قيمته <code>true</code>. لا يكون هذا مفيدًا بحد ذاته ولكنّه يُستخدَم كبداية لأدوات اختبار أخرى. | |||
==== <code>scryRenderedDOMComponentsWithClass()</code> ==== |
مراجعة 03:05، 9 سبتمبر 2018
استيراد الأدوات
import ReactTestUtils from 'react-dom/test-utils'; // ES6
var ReactTestUtils = require('react-dom/test-utils'); // ES5 with npm
لمحة عامة
تزيد أدوات الاختبار ReactTestUtils
من سهولة اختبار مكوّنات React في إطار عمل الاختبار الذي تريده. يستخدم Facebook الأداة Jest لاختبار JavaScript بسهولة. تعلم كيفية البدء مع Jest عبر درس React في موقع Jest.
ملاحظة: أطلقت Airbnb أداة اختبار تُدعى Enzyme والتي تجعل من السهل التعامل مع ناتج مكوّناتك. إن قرّرت استخدام أداة اختبار أخرى مع Jest فقد تستحق تجربتها من هنا.
هنالك أداة بديلة أخرى تُدعى react-testing-library
مُصمَّمة لتمكين وتشجيع كتابة اختبارات لاستخدامها مع مكوّناتك بينما يستخدمها المستخدم النهائي. تعمل أيضًا مع أي مُشغِّل اختبار.
مرجع
التصيير السطحي (Shallow Rendering)
عند كتابة وحدات اختبار لمكتبة React يكون التصيير السطحي مفيدًا لك. يُتيح لك التصيير السطحي تصيير مكوّن على عمق مستوى واحد وتوضيح الحقائق حول ما يُعيده تابع التصيير، بدون القلق حول سلوك المكوّنات الأبناء والتي لم تُصيَّر أو ينشأ عنها نسخة. لا يحتاج ذلك إلى DOM.
ملاحظة: انتقل التصيير السطحي إلى react-test-renderer/shallow
. تعلم المزيد حول التصيير السطحي في صفحة التوثيق الخاصّة به.
أدوات أخرى
Simulate
Simulate.{eventName}(
element,
[eventData]
)
محاكاة حدث في عقدة DOM مع خيار إضافي لبيانات الأحداث eventData
.
تمتلك الأداة Simulate تابعًا لكل حدث تفهمه React.
الضغط على العنصر:
// <button ref={(node) => this.button = node}>...</button>
const node = this.button;
ReactTestUtils.Simulate.click(node);
تغيير القيمة لحقل الإدخال ثمّ الضغط على ENTER
:
// <input ref={(node) => this.textInput = node} />
const node = this.textInput;
node.value = 'giraffe';
ReactTestUtils.Simulate.change(node);
ReactTestUtils.Simulate.keyDown(node, {key: "Enter", keyCode: 13, which: 13});
ملاحظة: يجب عليك تزويد أي خاصيّة حدث تستخدمها في مكوّنك (مثل KeyCode
، و Which
، إلخ...) لأنّ React لا تُنشِئ أي من هذه الخاصيّات لأجلك.
renderIntoDocument()
renderIntoDocument(element)
تصيير عنصر React في عقدة DOM منفصلة في المستند. تتطلّب هذه الدالة قابلية الوصول إلى DOM.
ملاحظة: تحتاج إلى أن تكون window
، و window.document
، و window.document.createElement
متوفرة لديك بشكل عام (global) قبل استيراد React، وإلّا ستعتقد React أنّها لا تستطيع الوصول إلى DOM ولن تعمل توابع مثل setState
.
mockComponent()
mockComponent(
componentClass,
[mockTagName]
)
تمرير وحدة المكوّن المحاكي إلى هذا التابع لتزويد المكوّن بتوابع مفيدة، فبدلًا من التصيير الاعتيادي سيصبح المكوّن عنصر div
بسيط (أو أي عنصر آخر ندخله ضمن الوسيط mockTagName
) يحتوي على أي مكوّن ابن نعطيه له.
ملاحظة: mockComponent()
هي واجهة برمجة تطبيق قديمة. نوصي باستخدام التصيير السطحي أو jest.mock()
بدلًا من ذلك.
isElement()
isElement(element)
يُعيد القيمة true
إن كان الوسيط element
عبارة عن عنصر React.
isElementOfType()
isElementOfType(
element,
componentClass
)
يُعيد القيمة true
إن كان الوسيط element
عبارة عن عنصر React نوعه هو componentClass
.
isDOMComponent()
isDOMComponent(instance)
يُعيد القيمة true
إن كان الوسيط instance
هو مكوّن DOM (مثل div
أو span
).
isCompositeComponent()
isCompositeComponent(instance)
يُعيد القيمة true
إن كان الوسيط instance
عبارة عن مكوّن مُعرَّف من قبل المستخدم كالأصناف أو الدوال.
isCompositeComponentWithType()
isCompositeComponentWithType(
instance,
componentClass
)
يُعيد القيمة true
إن كان الوسيط instance
عبارة عن مكوّن من النوع componentClass
.
findAllInRenderedTree()
findAllInRenderedTree(
tree,
test
)
التنقل عبر مكوّنات شجرة المكوّنات وجمع كل المكوّنات حيث يكون test(component)
قيمته true
. لا يكون هذا مفيدًا بحد ذاته ولكنّه يُستخدَم كبداية لأدوات اختبار أخرى.