RSpec

RSpec هي أداة اختبار لغة برمجة خاصة بمجال معين (DSL) مكتوبة بلغة Ruby لاختبار أكواد Ruby. [ 4 ] وهي إطار عمل لتطوير البرمجيات الموجه بالسلوك (BDD) يُستخدم على نطاق واسع في تطبيقات الإنتاج. تقوم الفكرة الأساسية وراء هذا المفهوم على تطوير البرمجيات الموجه بالاختبار (TDD)، حيث تُكتب الاختبارات أولاً، ثم يعتمد التطوير على كتابة الحد الأدنى من الكود اللازم لاجتياز تلك الاختبارات، يليه إعادة هيكلة الكود . تحتوي RSpec على إطار عمل محاكاة خاص بها مُدمج بالكامل في إطار العمل، ويعتمد على JMock . [ 5 ] بساطة بناء جملة RSpec تجعلها من أدوات الاختبار الشائعة لتطبيقات Ruby. يمكن استخدام أداة RSpec بتثبيت حزمة gem التي تتكون من ثلاث حزم gem أخرى، وهي : [ 4 ]rspecrspec-corerspec-expectationrspec-mock.

تاريخ

بدأ مشروع RSpec كتجربة على يد ستيفن بيكر عام ٢٠٠٥ مع أعضاء فريقه: ديف أستلز، وأسلاك هيليسوي، وديفيد تشيليمسكي. تولى تشيليمسكي مسؤولية تطوير RSpec-Rails الذي سهّل التكامل مع Ruby on Rails. صدرت النسخة الأولى، RSpec 1.0، في مايو ٢٠٠٧، والتي احتوت على العديد من الميزات الأساسية لـ RSpec، والتي لا تزال موجودة في أحدث الإصدارات. مع ذلك، ونظرًا لبعض المشكلات التقنية، مثل بطء الاختبار، توقف تطويرها لاحقًا. صدرت النسخة الثالثة من RSpec، RSpec 3، في يوليو ٢٠١٤، والتي تضمنت العديد من الميزات الجديدة، مثل التحقق من التكرارات، والمطابقات القابلة للتركيب، وغيرها الكثير.

الاستخدام

وصف سلوك الأشياء

كما ذُكر سابقًا، توفر RSpec لغةً خاصة بالمجال لوصف سلوك الكائنات . الكلمات المفتاحية المستخدمة في RSpec مشابهة لتلك المستخدمة في لغات أخرى أو أطر عمل تطوير البرمجيات القائمة على الاختبار (TDD). [ 6 ] على سبيل المثال، إذا أخذنا في الاعتبار الكلمات المفتاحية المستخدمة في Test::Unit، فيمكن ربطها بكلمات RSpec المفتاحية كما يلي:

  • يصبح التأكيد توقعاً
  • يصبح أسلوب الاختبار مثالاً برمجياً
  • تتحول حالة الاختبار إلى مجموعة أمثلة

توجد العديد من الكلمات المفتاحية التي تُستخدم في السياق نفسه ولكن بأسماء متشابهة. يوفر بناء جملة RSpec سهولة في القراءة ويصف سلوك الكود، مما يمنح المبرمج حرية أكبر. يعمل كل إطار اختبار وفق التسلسل التالي: عند وجود سياق معين، وعند وقوع حدث ما، ما هي النتيجة المتوقعة؟ تُشكل الدوال مثل describe() و context() و it() على التوالي الهيكل الأساسي لكود الاختبار.

يصف()

تُستخدم الدالة `describe()` لوصف فئة أو دالة أو مجموعة أمثلة. وهي الكتلة الخارجية التي تحتوي فعليًا على كود الاختبار، وتُبيّن خصائص الكود المُضمّن فيها. تأخذ هذه الدالة عددًا من الوسائط وكتلة اختيارية. [ 6 ] مع ذلك ، عادةً ما تُستخدم وسيطة واحدة أو اثنتان لوصف سلوك مجموعة الأمثلة. تُمثّل الوسيطة الأولى مرجعًا إلى الفئة أو الوحدة، بينما الوسيطة الثانية اختيارية، ويكون نوع بياناتها سلسلة نصية . [ 6 ] يمكن أيضًا تداخل مجموعات الأمثلة. فيما يلي مثال على استخدام الدالة `describe()`: [ 6 ]

وصف المستخدم ، "بدون رصيد حساب" { .... } = > مستخدم بدون رصيد حساب

[ 6 ]

سياق()

تُستخدم كتلة ` context ()` لوصف السياق الذي تُستخدم فيه الفئة أو الطريقة المذكورة في كتلة `describe`. يمكن اعتبارها اسمًا بديلًا لكلمة `describe()` في هذا السيناريو، ويمكن استخدامهما بشكل متبادل. عمومًا، تُستخدم `describe()` للأشياء، بينما تُستخدم `context()` للسياقات. يساعد ذلك في استكشاف نتائج مختلفة في سيناريوهات مختلفة. يمكن وصف المثال المذكور أعلاه باستخدام طريقة `context()` كما يلي: [ 6 ]

وصف المستخدم do context "ليس لديه رصيد حساب" do .... نهاية نهاية

[ 6 ] استخدامcontext()يجعل من السهل فحص ملف المواصفات ويوضح ما يتعلق به.

هو - هي()

هي دالة RSpec تصف مواصفات العينة في السياق. تأخذ كتلة it() سلسلة نصية كوسيط، ويمكن اعتبار السلسلة النصية التي تلي الكلمة المفتاحية 'it' بمثابة الدالة التي يُتوقع من الكتلة تنفيذها، أو بعبارة أخرى، يمكن اعتبارها حالة اختبار. انظر المثال التالي: [ 6 ]

وصف المستخدم do context "ليس لديه رصيد في الحساب" do it "غير مسموح له بالموافقة على قرض سكني" do puts "لا يمكن الموافقة على القرض لعدم وجود رصيد في الحساب." end end end

[ 6 ]

RSpec::Expectations

في RSpec، التوقع هو عبارة تُعبّر عن الحالة التي يُتوقع أن يكون عليها شيء ما، عند نقطة معينة في تنفيذ مثال برمجي. يستخدم RSpec إطار عمل بسيطًا وكلمات مفتاحية مثل should() و should_not() للتعبير عن التوقعات. يدعم RSpec أدوات المطابقة، أي الكائنات التي تحاول مطابقة نتيجة متوقعة، للعمليات الشائعة والتعبيرات غير الشائعة. على سبيل المثال، إذا كانت النتيجة المتوقعة لنتيجة ما هي القيمة العددية 5، فإن توقع RSpec الذي يستخدم أداة المطابقة equal لنفس القيمة يُكتب كما يلي: [ 6 ]

result.should equal(5)

RSpec::Mocks

توفر RSpec مكتبة تسمى RSpec::Mocks لإنشاء بدائل اختبارية تسهل التركيز على الأدوار واكتشاف الواجهات ، والأهم من ذلك إحراز تقدم دون تبعيات مُنفذة ، مما يوفر عزلاً عن الترابط وعدم الحتمية . [ 6 ]

الأدوات والتكامل

يدعم RSpec العديد من محررات النصوص ومجموعات أدوات تغطية البرامج. كما يوفر RSpec مجموعة من الأدوات المساعدة ونقاط التوسعة لدعم توسيع نطاقه لتلبية الاحتياجات الخاصة بكل مجال. على سبيل المثال، استخدام البيانات الوصفية المرتبطة بالمجموعات والأمثلة لأغراض إعداد التقارير، واستخدام الإعدادات العامة لتعيين كتل ما قبل وما بعد لكل مجموعة أمثلة، واستخدام وحدات الماكرو، وما إلى ذلك.

أدوات اختبار روبي الأخرى

مراجع

  1. فريق RSpec الأساسي . تم الاطلاع عليه بتاريخ 8 أبريل 2013.
  2. "جميع إصدارات rspec" . rubygems.org . تم الاطلاع عليه بتاريخ 11 فبراير 2014 .
  3. "الإصدار 3.13.0" . 4 فبراير 2024. تم الاطلاع عليه بتاريخ 20 فبراير 2024 .
  4. 1 2 "مقدمة إلى RSpec | مشروع أودين" . www.theodinproject.com . تم الاطلاع عليه بتاريخ 18-02-2017 .
  5. "jMock - مكتبة كائنات وهمية معبرة للغة جافا" . www.jmock.org . تم الاطلاع عليه بتاريخ 18 فبراير 2017 .
  6. ١ ٢ ٣ ٤ ٥ ٦ ٧ ٨ ٩ ١٠ ١١ "كتاب RSpec: التطوير القائم على السلوك باستخدام RSpec وCucumber وFriends" من تأليف ديفيد تشيلمسكي، وديف أستلز، وزاك دينيس، وأسلاك هيليسوي، وبريان هيلمكامب، ودان نورث | مكتبة براغماتيك" . pragprog.com . تاريخ الاسترجاع : ١١ فبراير ٢٠١٧ .

للمزيد من القراءة

1. البدء باستخدام RSpec: (خطوات التثبيت) http://rspec.info/

2. بيك، ك. (2014). تطوير البرمجيات الموجه بالاختبار من خلال الأمثلة . بوسطن: أديسون-ويسلي.