Contao هو نظام إدارة محتوى PHP مفتوح المصدر للأشخاص الذين يريدون موقع ويب احترافي يسهل صيانته. قم بزيارة موقع المشروع لمزيد من المعلومات.
توفر حالة اختبار Contao حالة اختبار PHPUnit مع بعض الطرق المفيدة لاختبار Contao. قم بتشغيل php composer.phar require --dev contao/test-case
لتثبيت الحزمة ثم استخدامها في فئات الاختبار الخاصة بك:
use Contao TestCase ContaoTestCase ;
class MyTest extends ContaoTestCase
{
}
الأسلوب getContainerWithContaoConfiguration()
يسخر من حاوية Symfony بالتكوين الافتراضي لامتداد Contao الأساسي.
$ container = $ this -> getContainerWithContaoConfiguration ();
echo $ container -> getParameter ( ' contao.upload_path ' ); // will output "files"
يمكنك أيضًا تعيين دليل المشروع:
$ container = $ this -> getContainerWithContaoConfiguration ( ' /tmp ' );
echo $ container -> getParameter ( ' kernel.project_dir ' ); // will output "/tmp"
echo $ container -> getParameter ( ' kernel.root_dir ' ); // will output "/tmp/app"
echo $ container -> getParameter ( ' kernel.cache_dir ' ); // will output "/tmp/var/cache"
تسخر طريقة mockContaoFramework)
من إطار عمل Contao الذي تمت تهيئته.
$ framework = $ this -> mockContaoFramework ();
$ framework
-> expect ( $ this -> atLeastOnce ())
-> method ( ' initialize ' )
;
تضيف الطريقة تلقائيًا محول التكوين بإعدادات Contao:
$ framework = $ this -> mockContaoFramework ();
$ config = $ framework -> getAdapter ( Contao Config::class);
echo $ config -> get ( ' datimFormat ' ); // will output "'Y-m-d H:i'"
يمكنك اختياريًا إضافة المزيد من المحولات كوسيطة:
$ adapters = [
Contao Config::class => $ configAdapter ,
Contao Encryption::class => $ encryptionAdapter ,
];
$ framework = $ this -> mockContaoFramework ( $ adapters );
سيقوم محول التكوين المحدد بالكتابة فوق محول التكوين الافتراضي.
سوف يسخر أسلوب mockAdapter()
من المحول بالطرق المحددة.
$ adapter = $ this -> mockAdapter ([ ' findById ' ]);
$ adapter
-> method ( ' findById ' )
-> willReturn ( $ model )
;
$ framework = $ this -> mockContaoFramework ([ Contao FilesModel::class => $ adapter ]);
يمكن تبسيط المحولات ذات قيمة الإرجاع البسيطة كما هو مذكور أعلاه:
$ adapter = $ this -> mockConfiguredAdapter ([ ' findById ' => $ model ]);
هذا الكود يفعل بالضبط نفس الكود أعلاه.
يسخر أسلوب mockClassWithProperties()
من فئة تستخدم الأساليب السحرية __set()
و __get()
لإدارة الخصائص.
$ mock = $ this -> mockClassWithProperties ( Contao PageModel::class);
$ mock -> id = 2 ;
$ mock -> title = ' Home ' ;
echo $ mock -> title ; // will output "Home"
إذا كان الفصل المراد الاستهزاء به للقراءة فقط، فيمكنك اختياريًا تمرير الخصائص كوسيطة منشئة:
$ properties = [
' id ' => 2 ,
' title ' => ' Home ' ,
];
$ mock = $ this -> mockClassWithProperties ( Contao PageModel::class, $ properties );
echo $ mock -> title ; // will output "Home"
إذا كنت بحاجة إلى استدعاء أسلوب من الفئة الأصلية، فيمكنك تمرير اسم الأسلوب كوسيطة ثالثة. سيكون الكائن الوهمي الناتج كائنًا وهميًا جزئيًا بدون الطريقة (الطرق) المحددة.
$ mock = $ this -> mockClassWithProperties ( Contao PageModel::class, [], [ ' getTable ' ]);
$ mock -> id = 2 ;
echo $ mock -> getTable (); // will call the original method
يسخر mockTokenStorage()
من تخزين الرمز المميز باستخدام رمز مميز يعيد إما مستخدم Contao الخلفي أو مستخدم الواجهة الأمامية.
$ tokenStorage = $ this -> mockTokenStorage ( Contao BackendUser::class);
$ user = $ tokenStorage -> getToken ()-> getUser ();
تقوم طريقة getTempDir()
بإنشاء دليل مؤقت بناءً على اسم فئة الاختبار وإرجاع مساره.
$ fs = new Filesystem ();
$ fs -> mkdir ( $ this -> getTempDir (). ' /var/cache ' );
ستتم إزالة الدليل تلقائيًا بعد إجراء الاختبارات. لكي ينجح هذا، يرجى التأكد دائمًا من استدعاء طريقة tearDownAfterClass()
الأصلية إذا قمت بتعريف الطريقة في فئة الاختبار الخاصة بك!
use Contao TestCase ContaoTestCase ;
class MyTest extends ContaoTestCase
{
public static function tearDownAfterClass ()
{
// The temporary directory would not be removed without this call!
parent :: tearDownAfterClass ();
}
}