<div> </div>
يعد كتابة اختبارات آلية للسمات جزءًا مهمًا من عملية تطوير السمات، حيث يمكن أن يساعد في ضمان استمرار عمل الميزات التي تقدمها السمة بشكل جيد مع مرور الوقت مع ميزات Discourse الأساسية.
تدعم Discourse حاليًا طريقتين لكتابة اختبارات الانحدار للسمات. الأولى تتبع بشكل أساسي طريقة EmberJS وتتضمن فقط اختبار كود جانب العميل. الطريقة الثانية هي كتابة اختبارات نظام Rails التي تسمح لك باختبار كود جانب الخادم وكود جانب العميل في نفس الوقت. ستركز هذه الوثيقة على كتابة اختبارات نظام Rails للسمات وهي ما نوصي به لمؤلفي السمات بالتركيز عليه عند كتابة اختبارات لسماتهم أيضًا.
اختبارات نظام Rails للسمات
في جوهرها، تستخدم Discourse أطر عمل الاختبار RSpec و Capybara لتشغيل اختبارات نظام Rails. يلزم وجود معرفة أساسية بـ RSpec و Capybara للبدء، ونوصي بقراءة الروابط التالية أولاً قبل البدء:
- GitHub - rspec/rspec-core: RSpec runner and formatters
- GitHub - teamcapybara/capybara: Acceptance test framework for web applications
إرشادات ونصائح لكتابة اختبارات نظام السمات
هذه بعض الإرشادات التي يجب اتباعها عند كتابة اختبارات النظام:
-
يُتوقع أن تكون اختبارات النظام موجودة في الدليل
spec/systemفي دليل السمة. -
يُتوقع أن يتبع كل ملف في الدليل
spec/systemتنسيق_spec.rb<وصف_اختبار_النظام>. -
يجب أن يحتوي كتلة RSpec
describeذات المستوى الأعلى على بيانات وصفيةsystem: true. مثال:RSpec.describe "Testing A Theme or Theme Component", system: true do it "displays the component" do ... end end -
تتوفر طرق مساعدة
upload_themeوupload_theme_componentويجب استدعاؤها قبل تشغيل الاختبارات. مثال:RSpec.describe "Testing A Theme or Theme Component", system: true do let!(:theme) do upload_theme end # أو `upload_theme_component` إذا كانت السمة الخاصة بك مكونًا # # let!(:theme_component) do # upload_theme_component # end it "displays the component" do ... end end -
يمكن تغيير إعداد السمة في اختبار النظام عن طريق استدعاء طريقة
update_settingعلى الكائنthemeثم حفظ السمة.مثال:
RSpec.describe "Testing A Theme", system: true do let!(:theme) do upload_theme end it "does not display the theme when `should_render` theme setting is false" do theme.update_setting(:should_render, false) theme.save! expect(page).not_to have_css("#some-identifier") end end -
تستخدم Discourse gem fabrication التي تسمح لنا بإعداد بيانات الاختبار التي نحتاجها لكل اختبار بسهولة. يمكن استخدام القائمة الكاملة للمصنعين المتوفرة في Discourse الأساسي في اختبار نظام السمة أيضًا.
مثال:
RSpec.describe "Testing A Theme", system: true do let!(:theme) do upload_theme end it "displays the theme" do user = Fabricate(:user) category = Fabricate(:category) topic = Fabricate(:topic) topic_2 = Fabricate(:topic, title: "This is topic number 2") ... end end -
استخدم طريقة المساعدة
sign_inللاختبار مقابل ملفات تعريف مستخدمين مختلفة.مثال:
RSpec.describe "Testing A Theme", system: true do let!(:theme) do upload_theme end it "does not display the theme for a regular user" do user = Fabricate(:user) sign_in(user) ... end it "displays the theme for a staff user" do admin = Fabricate(:admin) sign_in(admin) ... end end -
في بعض الأحيان سترغب في جعل الاستعلام عن أجزاء الصفحة وفحصها أسهل وقابلة لإعادة الاستخدام لاختبارات النظام الخاصة بك. للقيام بذلك، يمكنك استخدام مفهوم PageObjects، والذي ستراه غالبًا في الأساس.
مثال:
# frozen_string_literal: true module PageObjects module Components class MyCustomComponent < PageObjects::Components::Base COMPONENT_SELECTOR = ".my-custom-component" def click_action_button find("#{COMPONENT_SELECTOR} .action-button").click end def has_content?(content) has_css?("#{COMPONENT_SELECTOR} .content", text: content) end end end endويمكنك بعد ذلك استخدامه عن طريق استيراده باستخدام
require_relativeالمدمج في Ruby في أعلى ملف اختبار النظام الخاص بك.require_relative "page_objects/components/my_custom_component"
تشغيل اختبارات نظام السمات
يمكن تشغيل اختبارات نظام السمات باستخدام أداة discourse_theme CLI rubygem ويمكن تثبيتها باستخدام هذه التعليمات.
بمجرد تثبيت أداة discourse_theme CLI، يمكنك تشغيل جميع اختبارات النظام في دليل السمة الخاص بك عن طريق تشغيل الأمر التالي:
discourse_theme rspec .
في التشغيل الأول لأمر rspec لسمة جديدة، سيُطلب منك ما إذا كنت ترغب في تشغيل اختبارات النظام باستخدام بيئة تطوير Discourse محلية أو حاوية Docker التي ستوفر لك بيئة التطوير المعدة. ما لم تكن مطورًا متمرسًا في إضافات أو سمات Discourse، نوصي باختيار n وتشغيل الاختبارات باستخدام حاوية Docker نظرًا لأن كل شيء سيعمل مباشرة.
يدعم الأمر discourse_theme rspec أيضًا تشغيل دليل مواصفات واحد، أو ملف، أو ملف بأرقام أسطر.
discourse_theme rspec /path/to/theme/spec/system
discourse_theme rspec /path/to/theme/spec/system/my_system_spec.rb
discourse_theme rspec /path/to/theme/spec/system/my_system_spec.rb:12
وضع الرأس (Headful mode)
بشكل افتراضي، يتم تشغيل اختبارات نظام السمات باستخدام Google Chrome في الوضع بدون رأس (headless mode). هذا وضع لا يعرض فيه المتصفح أي شيء على الشاشة مما يسمح لعمليات تشغيل الاختبار بالانتهاء بشكل أسرع. ومع ذلك، غالبًا ما يكون من المفيد أن تكون قادرًا على رؤية ما يفعله اختبار النظام الذي كتبته عن طريق استخدام Google Chrome في وضع الرأس. يمكنك تمكين هذا الوضع عن طريق تمرير الخيار --headful إلى الأمر discourse_theme rspec.
discourse_theme rspec . --headful
سيقوم الأمر أعلاه بتشغيل اختبارات النظام في وضع الرأس حيث يمكن رؤية تشغيل الاختبارات بصريًا.
يمكنك أيضًا إيقاف تنفيذ الاختبار في حالة الاختبار الخاصة بك عن طريق استخدام طريقة المساعدة pause_test، مما يسمح لك بفحص الحالة الحالية للتطبيق في المتصفح.
مثال:
RSpec.describe "Testing A Theme", system: true do
let!(:theme) do
upload_theme
end
it "displays the theme" do
visit("/")
click("#some-button")
pause_test
# ...
end
end
هذه الوثيقة تخضع للتحكم في الإصدار - اقترح تغييرات على github.