الفرق بين المراجعتين ل"React/test utils"

من موسوعة حسوب
اذهب إلى التنقل اذهب إلى البحث
سطر 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>'''ملاحظة:''' يجب عليك تزويد أي خاصيّة حدث تستخدمها في مكوّنك (مثل KeyCode، و Which، إلخ...) لأنّ React لا تُنشِئ أي من هذه الخاصيّات لأجلك.
+
</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. لا يكون هذا مفيدًا بحد ذاته ولكنّه يُستخدَم كبداية لأدوات اختبار أخرى.

scryRenderedDOMComponentsWithClass()‎