اذهب إلى المحتوى

السؤال

نشر

في كل مشروع لارافيل Laravel يوجد ملف env. ويحتوي على تفاصيل الإتصال بقاعدة البيانات ومعلومات أخرى عن المشروع، وفي الفترة الأخيرة بدأت بتعلم إستخدام phpunit وعمل إختبارات tests، ولكن واجهتني مشكلة وهي أني أريد أن أستخدم قاعدة بيانات مختلفة للإختبارات ولذلك علي أن أقوم بإستخدام ملف env. مختلف عن الملف الأصلي ليتم الإتصال بقاعدة بيانات الخاصة بالإختبارات.

كيف أقوم بإستخدام ملف env. مختلف عند تشغيل الإختبارات في لارافيل Laravel؟

Recommended Posts

  • 0
نشر

تدعم لارافل بشكل افتراضي نسخة إضافية من متغيرات البيئة خاصة بعمليات الاختبار، كما يتم نقل الجلسات sessions و الذاكرة المؤقتة cache لتصبح ضمن المصفوفات Arrays لتلبية حاجة الاختبارات دون التأثير على أماكن تخزين التطبيق الأساسية.

تسمح لارافل باستخدام نسخة خاصة من متغيّرات البيئة من خلال إنشاء ملف ضمن جذر المشروع باسم .env.testing وعندها سيتم استخدام قيم المتغيّرات من هذا الملف عوضاً عن الملف .env عند تشغيل الاختبارات.

ولتأكيد ذلك يمكنك تمرير الخيار التالي مع أوامر artisan:

--env=testing

يمكنك الاطلاع على صفحة الاختبار ضمن التوثيق الرسمي لمعرفة الخيارات المتاحة حسب الإصدار المستخدم في مشروعك.

  • 0
نشر

يمكن تعيين متغيرات بيئة مختلفة مخصصة لبيئة الاختبار ضمن ملف phpunit.xml الموجود في جذر مجلد المشروع، ضمن الوسم php يمكن إضافة الوسوم server وتعيين الخاصية name باسم متغير البيئة، والخاصية value بالقيمة لذلك المتغير، بهذا يمكنك تعديل القيم التي تريدها مختلفة فقط عن ملف env. وليس كل القيم بشكل مشابعه للتالي:

<phpunit ...>
  ...
  <php>
    <server name="DB_DATABASE" value="testing_db"/> <!-- تعيين قاعدة البيانات للاختبارات -->
  </php>
</phpunit>

يمكنك الاستفادة من الاجابة التالية:

 

  • 1
نشر

يمكنك تجاوز التابع createApplication لتحديد مسار ملف بيئة جديد غير الافتراضي. 

يعيد هذا التابع كائنا عن الصنف Illuminate\Foundation\Application.

يبدوا هذا التابع كـ:

    /**
     * Creates the application.
     *
     * @return \Illuminate\Foundation\Application
     */
    public function createApplication()
    {
        $app = require __DIR__.'/../bootstrap/app.php';

        $app->make(Kernel::class)->bootstrap();

        return $app;
    }

في السمة CreatesApplication الموجودة داخل Tests

يوجد التابع loadEnvironmentFrom، يمكنك استعماله لتحديد مسار جديد:

    /**
     * Creates the application.
     *
     * @return \Illuminate\Foundation\Application
     */
    public function createApplication()
    {
        $app = require __DIR__.'/../bootstrap/app.php';

        $app->loadEnvironmentFrom('.env.testing');

        $app->make(Kernel::class)->bootstrap();

        return $app;
    }

يتم استعمال هاته السمة من قبل الصنف المجرد TestCase الكائن بـ tests. وترث كامل اختبارات الوحدة والميزة هذا الصنف، ويتم تشغيل هذا التابع من السمة عند كل مرة يتم فيها عمل booting للإختبارات. 

لاحظ أن اي اعداد آخر معرف في ملف phpunit.xml سيتم تجاهل قيمته المسندة له في ملف البيئة الجديد. اي ان الأولوية تكون دوما لملف phpunit.xml فهو المفترض ان يحدد طريقة عمل التطبيق او الاختبارات في بيئة اختبارية.

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...