كيف تبدأ اختبار كود WordPress الخاص بك باستخدام Pest PHP Testing Framework
نشرت: 2022-05-18يمكننا أن نتفق جميعًا على أن WordPress قد قطع شوطًا طويلاً منذ بدايته وأنه نما إلى شيء أكثر بكثير من مجرد برامج التدوين.
في جوهره ، لا يزال نظام إدارة المحتوى (CMS) ، ولكن مع وجود أكثر من 59000 مكون إضافي في دليل wordpress.org ، يمكنك تخصيصه ليكون أكثر من ذلك بكثير.
سبب شعبيتها هو انخفاض حاجز الدخول لكل من منشئي المحتوى والمطورين. في بعض الأحيان يأتي هذا مع تكلفة. ليس سراً أن WordPress يتمتع بسمعة سيئة عندما يتعلق الأمر بالتطوير. يحتوي على الكثير من الأمتعة القديمة والقواعد الصارمة التي تمنع أي تغيير في كسر التوافق مع الإصدارات السابقة عندما يتعلق الأمر برمز PHP (Gutenberg هي قصة أخرى لن أخوض فيها).
غالبًا ما يتم استخدام كود PHP القديم هذا من قبل المطورين الذين بدأوا في دخول عالم البرمجة ، والمشكلة في ذلك أنه يمكنهم تعلم بعض أنماط البرمجة السيئة. وهذا بدوره يعني أنهم سيعيدون استخدام الشفرة المكتوبة بشكل سيئ ، مما يزيد من مقدار الشفرة السيئة في العالم.
هذا هو المكان الذي يحصل فيه WordPress على سمعته السيئة في مجتمع المطورين.
كسر الحلقة
فكيف يمكننا كسر هذه الدائرة من الشفرات السيئة؟ من خلال تعليم المطورين الجدد كيف يجب عليهم كتابة كود جيد. أحد الأمثلة على تعليم المطورين الجدد (ولكن أيضًا المطورين القدامى الذين لا يزالون يتشبثون بطريقة "WordPress" في القيام بالأشياء) هو من خلال كتابة دروس تعليمية.
هناك طريقة أخرى تتمثل في تشجيعهم على استخدام الأدوات التي يمكن أن تساعدهم في كتابة تعليمات برمجية أفضل.
أنا مشترك حاليًا في العمل الذي يهدف إلى إصدار الإصدار الجديد من معايير ترميز WordPress ، وهي مجموعة من القواعد المستخدمة لأداة PHP_CodeSniffer التي ستتيح لك معرفة ما إذا كانت التعليمات البرمجية الخاصة بك بها بعض المشكلات المحتملة (الأمان ، وأفضل الممارسات ، ونمط الكود ).
هناك أداة أخرى قمت بتطويرها مؤخرًا وهي الحزمة التي ستساعد المطورين على إعداد اختبارات تكامل WordPress التي تستخدم إطار عمل اختبار Pest.
حسنًا ، لماذا نحتاج إلى هذه الأداة الجديدة؟
الدافع الرئيسي وراء إنشاء هذه الحزمة هو تشجيع المزيد من الأشخاص على كتابة اختبارات للكود الخاص بهم ، وخاصة مطوري المكونات الإضافية.
يتعامل الكثير من المطورين في مجتمع WordPress مع المانترا: أستطيع أن أرى أنها تعمل لأنني جربتها في متصفحي. لا بأس بذلك ، ولكن هناك مشكلات في ذلك.
أولاً ، إنها تستغرق وقتًا طويلاً. في كل مرة تقوم فيها بإجراء بعض التغيير ، تحتاج إلى التأكد من أنه يعمل ، ولكن أيضًا لم تقم بكسر أي شيء.
ثانيًا ، يرتكب الناس أخطاء. نحن لسنا مضمونين ، وقد يتم إساءة استخدام التعليمات البرمجية بطرق لم تتخيلها مطلقًا. ستندهش من مدى إبداع الأشخاص عند كتابة الكود.
الاختبارات الآلية سريعة ويمكن أن تساعدك في اختبار الحالات المختلفة التي ستحدث عند تنفيذ التعليمات البرمجية الخاصة بك.
تختبر السلوك المقصود (المسار السعيد) ، وبطريقة سريعة ، يمكنك إضافة أمثلة على كيفية استخدام التعليمات البرمجية الخاصة بك بطريقة لم تكن تنوي استخدامها (مسار غير سعيد).
كما أنه يحمي التعليمات البرمجية الخاصة بك من الانحدار. يحدث انحدار الكود عندما تقوم عن غير قصد بكسر جزء من التعليمات البرمجية الخاصة بك عن طريق إضافة رمز جديد.
مشكلة الاختبارات التي تم إعدادها حتى الآن
الاختبار في WordPress ليس شيئًا جديدًا. وليس الأمر كما لو أنه لم يكن بإمكانك إعداد اختبارات للرمز الخاص بك من قبل. هناك مكتبات مذهلة ستساعدك في إعداد كل شيء مثل متصفح wp.
لكن المشكلة تكمن في أن إجراء الإعداد غالبًا ما يكون ثقيلًا.
تحتاج إلى إعداد قاعدة بيانات منفصلة للاختبارات ، وتحتاج إلى تشغيل نصوص برمجية معينة ، ثم تغيير الملفات لجعلها تعمل كلها.
دعونا نواجه الأمر ، إنه ليس بالأمر السهل القيام به ، والمطورين بطبيعتهم مخلوقات كسولة (لهذا السبب نكتب كودًا للقيام بأشياء لنا).
الهدف من إعداد اختبار تكامل wp-pest هو التخلص من كل هذا العمل الإضافي.
كيفية إعداده
من أجل إعداده ، يجب أن يستخدم مشروعك Composer. إنها طريقة قياسية فعلية لإضافة حزم إلى التعليمات البرمجية الخاصة بك.
في نوع المحطة الخاصة بك
composer require dingo-d/wp-pest-integration-test-setup --dev
بعد تنزيل الحزمة وتوابعها ، يمكنك إعداد اختبارات السمات عن طريق الكتابة
vendor/bin/wp-pest setup theme
أو ، في حالة رغبتك في إعداد اختبارات للمكون الإضافي الخاص بك ، يمكنك الكتابة
vendor/bin/wp-pest setup plugin --plugin-slug=your-plugin-slug
اختياريًا ، يمكنك توفير معلمة --wp-version
، لتحديد إصدار WordPress الذي ترغب في اختبار الكود الخاص بك عليه.
في الخلفية ، سيتم تنزيل مثيل WordPress ، وسيتم إعداد قاعدة بيانات في الذاكرة ، إلى جانب مثالين للاختبارات التي يمكنك تشغيلها.
ثم تشغيل إما
vendor/bin/pest --group=unit
أو
vendor/bin/pest --group=integration
سيجري الاختبارات.
يكمن جمال Pest في أن تركيبها مناسب للمطورين. يحتوي على وثائق مذهلة وبناء جملة رائع. لنلق نظرة على مثال بسيط. لنفترض أنك تسجل نوع منشور مخصص يسمى "الكتب":
<?php /** * Plugin Name: Test plugin * Desctiption: Test plugin * Version: 1.0.0 * License: MIT */ function test_plugin_register_books_cpt() { $args = array( 'label' => esc_html__( 'Books', 'test-plugin' ), 'public' => true, 'publicly_queryable' => true, 'show_ui' => true, 'show_in_menu' => true, 'query_var' => true, 'rewrite' => array( 'slug' => 'book' ), 'capability_type' => 'post', 'has_archive' => true, 'hierarchical' => false, 'menu_position' => null, 'supports' => array( 'title', 'editor', 'author', 'thumbnail', 'excerpt', 'comments' ), ); register_post_type( 'book', $args ); } add_action( 'init', 'test_plugin_register_books_cpt' );
بعد تشغيل أمر الإعداد الذي يضيف مثالاً ، سيبدو اختبار يسمى BooksCptTest.php
بالشكل التالي:
<?php namespace Tests\Integration; beforeEach(function () { parent::setUp(); }); afterEach(function () { parent::tearDown(); }); test('Books custom post type is registered', function () { // We can use assertions from PHP_Unit. $this->assertNotFalse(has_action('init', 'test_plugin_register_books_cpt')); $registeredPostTypes = \get_post_types(); // Or we can use expectations API from Pest. expect($registeredPostTypes) ->toBeArray() ->toHaveKey('book'); });
تشغيل vendor/bin/pest --group=integration
يعطينا المخرجات التالية:
Installing... Running as single site... To run multisite, use -c tests/phpunit/multisite.xml Not running ajax tests. To execute these, use --group ajax. Not running ms-files tests. To execute these, use --group ms-files. Not running external-http tests. To execute these, use --group external-http. PASS Tests\\Integration\\BooksCptTest ✓ Books custom post type is registered Tests: 1 passed Time: 0.14s
استنتاج
وبهذه الطريقة ، لديك القدرة على إجراء اختبارات تكامل WordPress في قالبك أو المكون الإضافي الخاص بك. الاختبارات مذهلة لأنها لا تحمينا من الأخطاء فحسب ، بل إنها تجبرنا أيضًا على كتابة تعليمات برمجية نظيفة وقابلة للاختبار. هذا ينطبق بشكل خاص على المكونات الإضافية التي لها منطق معقد أو تتواصل مع واجهات برمجة تطبيقات تابعة لجهات خارجية.
ستجبرك كتابة الاختبارات لمثل هذا الرمز البرمجي على التفكير في الشكل الذي تبدو عليه بنية الشفرة الخاصة بك حتى تتمكن من كتابة اختبارات آلية بسهولة - ناهيك عن الوقت والمال الذي ستوفره من عدم الاضطرار إلى اختبار كل شيء يدويًا.
إذا كنت تعتقد أن هذا شيء قد تستفيد منه ، فلا تتردد في استخدامه ، وقم بنجمة المستودع على GitHub.
نأمل أن يشجع هذا المزيد من مطوري WordPress على استخدام الأدوات التي من شأنها تحسين مهارات الترميز لديهم.