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

من موسوعة حسوب
اذهب إلى التنقل اذهب إلى البحث
سطر 65: سطر 65:
  
 
=== <code>testRenderer.toJSON()‎</code> ===
 
=== <code>testRenderer.toJSON()‎</code> ===
 +
<syntaxhighlight lang="javascript">
 +
testRenderer.toJSON()
 +
</syntaxhighlight>يُعيد كائن يُمثِّل الشجرة المُصيَّرة. تحتوي هذه الشجرة على عُقَد خاصّة بالمنصّة مثل ‎<code><nowiki><div></nowiki></code>‎ أو ‎<code><View></code>‎ وخاصيّاتها، ولكنّه لا يحتوي على مكوّنات مكتوبة من قبل المستخدم. يُفيد هذا لأجل اختبار اللقطات (snapshot testing).
 +
 +
=== <code>testRenderer.toTree()‎</code> ===
 +
<syntaxhighlight lang="javascript">
 +
testRenderer.toTree()
 +
</syntaxhighlight>يُعيد كائن يُمثِّل الشجرة المُصيَّرة. وعلى النقيض من التابع <code>toJSON()</code>‎ يكون التمثيل أكثر تفصيلًا ويتضمّن المكوّنات المكتوبة من قبل المستخدم. لن تحتاج هذا التابع غالبًا إلّا إذا كنت تكتب مكتبتك الخاصّة بناءً على مُصيِّر الاختبار.
 +
 +
=== <code>testRenderer.update()‎</code> ===
 +
<syntaxhighlight lang="javascript">
 +
testRenderer.update(element)
 +
</syntaxhighlight>يُعيد تصيير الشجرة في الذاكرة مع عنصر جذري جديد. يُحاكي هذا تحديث React الذي يطرأ على العنصر الجذري. إن كان للعنصر الجديد نفس النوع والمفتاح للعنصر السابق فستُحدَّث الشجرة، وفيما عدا ذلك سيُعيد وصل شجرة جديدة.
 +
 +
=== <code>testRenderer.unmount()‎</code> ===
 +
<syntaxhighlight lang="javascript">
 +
testRenderer.unmount()
 +
</syntaxhighlight>يفصل الشجرة الموجودة في الذاكرة، وبذلك يُطلِق أحداث دورة الحياة المناسبة.
 +
 +
=== <code>testRenderer.getInstance()‎</code> ===
 +
<syntaxhighlight lang="javascript">
 +
testRenderer.getInstance()
 +
</syntaxhighlight>يُعيد النسخة الموافقة للعنصر الجذري إن كانت موجودة. لن يعمل هذا التابع إن كان العنصر الجذري عبارة عن مكوّن دالة لأنّها لا تمتلك نُسَخًا مثل مكوّنات الأصناف.
 +
 +
=== <code>testRenderer.root</code> ===
 +
<syntaxhighlight lang="javascript">
 +
testRenderer.root
 +
</syntaxhighlight>يُعيد نسخة الاختبار للكائن الجذري والتي تفيد في إجراء استعلامات حول عقد مُحدَّدة في شجرة المكوّنات. بإمكانك استخدامه لإيجاد نُسَخ الاختبار الأخرى الموجودة في مستويات أدنى من الشجرة.
 +
 +
=== <code>testInstance.find()‎</code> ===
 +
<syntaxhighlight lang="javascript">
 +
testInstance.find(test)
 +
</syntaxhighlight>إيجاد نسخة الاختبار الوحيدة المنحدرة التي يُعيد فيها التابع <code>test(testInstance)</code>‎ القيمة <code>true</code>. إن كان التابع <code>test(testInstance)‎</code> لا يُعيد القيمة <code>true</code> لنسخة اختبار وحيدة بالضبط فسيرمي هذا التابع خطأً.
 +
 +
=== <code>testInstance.findByType()‎</code> ===
 +
<syntaxhighlight lang="javascript">
 +
testInstance.findByType(type)
 +
</syntaxhighlight>

مراجعة 20:20، 10 سبتمبر 2018


الاستيراد

import TestRenderer from 'react-test-renderer'; // ES6
const TestRenderer = require('react-test-renderer'); // ES5 with npm

لمحة عامة

تُزوّدنا هذه الحزمة بمُصيِّر React يُمكِن استخدامه لتصيير مكوّنات React إلى كائنات JavaScript نقيّة بدون الاعتماد على DOM أو بيئة الهاتف المحمول الأصليّة.

تُسهِّل هذه الحزمة بشكل أساسي من أخذ صورة حول التسلسل الهرمي للمكوّنات (مشابه لشجرة DOM) والتي يُصيّرها React DOM أو React Native بدون استخدام المتصفح أو jsdom.

مثال:

import TestRenderer from 'react-test-renderer';

function Link(props) {
  return <a href={props.page}>{props.children}</a>;
}

const testRenderer = TestRenderer.create(
  <Link page="https://www.facebook.com/">Facebook</Link>
);

console.log(testRenderer.toJSON());
// { type: 'a',
//   props: { href: 'https://www.facebook.com/' },
//   children: [ 'Facebook' ] }

نستطيع استخدام ميزة الاختبار بالتقاط الصورة الموجودة في Jest لحفظ نسخة عن شجرة JSON بشكل تلقائي إلى ملف والتحقق في اختباراتك من أنّها لم تتغيّر. تعلّم المزيد حول ذلك. بإمكانك أيضًا التنقل في الناتج لإيجاد عقد محددة:

import TestRenderer from 'react-test-renderer';

function MyComponent() {
  return (
    <div>
      <SubComponent foo="bar" />
      <p className="my">أهلًا</p>
    </div>
  )
}

function SubComponent() {
  return (
    <p className="sub">فرعي</p>
  );
}

const testRenderer = TestRenderer.create(<MyComponent />);
const testInstance = testRenderer.root;

expect(testInstance.findByType(SubComponent).props.foo).toBe('bar');
expect(testInstance.findByProps({className: "sub"}).children).toEqual(['Sub']);

مرجع

TestRenderer.create()‎

TestRenderer.create(element, options);

إنشاء نسخة من TestRenderer مع عنصر React المُمرَّر. لا يستخدم هذا التابع DOM الحقيقي ولكنّه يُصيِّر بشكل كامل شجرة المكوّنات في الذاكرة. تملك النسخة المُعادة التوابع والخاصيّات التالية.

testRenderer.toJSON()‎

testRenderer.toJSON()

يُعيد كائن يُمثِّل الشجرة المُصيَّرة. تحتوي هذه الشجرة على عُقَد خاصّة بالمنصّة مثل ‎<div>‎ أو ‎<View>‎ وخاصيّاتها، ولكنّه لا يحتوي على مكوّنات مكتوبة من قبل المستخدم. يُفيد هذا لأجل اختبار اللقطات (snapshot testing).

testRenderer.toTree()‎

testRenderer.toTree()

يُعيد كائن يُمثِّل الشجرة المُصيَّرة. وعلى النقيض من التابع toJSON()‎ يكون التمثيل أكثر تفصيلًا ويتضمّن المكوّنات المكتوبة من قبل المستخدم. لن تحتاج هذا التابع غالبًا إلّا إذا كنت تكتب مكتبتك الخاصّة بناءً على مُصيِّر الاختبار.

testRenderer.update()‎

testRenderer.update(element)

يُعيد تصيير الشجرة في الذاكرة مع عنصر جذري جديد. يُحاكي هذا تحديث React الذي يطرأ على العنصر الجذري. إن كان للعنصر الجديد نفس النوع والمفتاح للعنصر السابق فستُحدَّث الشجرة، وفيما عدا ذلك سيُعيد وصل شجرة جديدة.

testRenderer.unmount()‎

testRenderer.unmount()

يفصل الشجرة الموجودة في الذاكرة، وبذلك يُطلِق أحداث دورة الحياة المناسبة.

testRenderer.getInstance()‎

testRenderer.getInstance()

يُعيد النسخة الموافقة للعنصر الجذري إن كانت موجودة. لن يعمل هذا التابع إن كان العنصر الجذري عبارة عن مكوّن دالة لأنّها لا تمتلك نُسَخًا مثل مكوّنات الأصناف.

testRenderer.root

testRenderer.root

يُعيد نسخة الاختبار للكائن الجذري والتي تفيد في إجراء استعلامات حول عقد مُحدَّدة في شجرة المكوّنات. بإمكانك استخدامه لإيجاد نُسَخ الاختبار الأخرى الموجودة في مستويات أدنى من الشجرة.

testInstance.find()‎

testInstance.find(test)

إيجاد نسخة الاختبار الوحيدة المنحدرة التي يُعيد فيها التابع test(testInstance)‎ القيمة true. إن كان التابع test(testInstance)‎ لا يُعيد القيمة true لنسخة اختبار وحيدة بالضبط فسيرمي هذا التابع خطأً.

testInstance.findByType()‎

testInstance.findByType(type)