فبستورم ، فبونيت و سيتكوكي
سؤال
أحاول إجراء بعض اختبارات الوحدة باستخدام وظيفة سيتكوكي () في بيئة تطوير متكاملة جيدة فبستورم.ولكن أحصل على الخطأ التالي في كل مرة:
Cannot modify header information - headers already sent by (output started at /tmp/phpunit.php:418)
ربما سبب هذا الخطأ هو طباعة ('بعض النص') مع فلوش () قبل سيتكوكي () الدعوة.ولكن يتم تنفيذ التنظيف في / تمب / فبونيت.ملف فب التي تم إنشاؤها بواسطة فبستورم.في حين سيتكوكي() يسمى من مصادري.لذلك لا يمكنني تحرير الملف الذي تم إنشاؤه للقيام بنوع من التخزين المؤقت للإخراج.أيضا هناك بعض لحظة أخرى:فبستورم ينفذ/تمب / فبونيت.فب النصي مثل هذا:
/usr/bin/php /tmp/phpunit.php -config /var/www/.../protected/tests/phpunit.xml d /var/www/.../protected/tests/unit/user
الرجاء مساعدتي في حل هذه المشكلة.كيف يمكنني تشغيل وحدة الاختبارات من فبستورم مباشرة?
المحلول
طريقة واحدة ممكنة حول هذا هو استخدام بديل 'وهمية' ل setcookie()
وظيفة.
هذه تقنية شائعة في اختبار الوحدة ، حيث تريد اختبار شيء يعتمد على فئة أو وظيفة خارجية لا تريد التأثير على الاختبار الحالي.
الطريقة للقيام بذلك سيكون لإنشاء تعريف وظيفة كعب ل setcookie()
في داخلك رمز اختبار الوحدة.ثم يتم استدعاء هذا أثناء الاختبار بدلا من الحقيقي setcookie()
وظيفة.بالضبط كيفية تنفيذ هذه الوظيفة كعب متروك لكم ، وسوف تعتمد على ما يستخدم التعليمات البرمجية الخاصة بك ل.
المشكلة الرئيسية سيكون لديك مع هذا النهج هو أن فب لا يسمح لك لتجاوز الوظائف الموجودة افتراضيا - إذا حاولت هذا على تثبيت فب القياسية ، ستحصل على " خطأ:لا يمكن إعادة الإعلان عن الوظيفة".
الحل لهذه المشكلة هو فب تمديد رونكيت, ، وهو مصمم بشكل صريح لهذا النوع من الاختبارات ، ويسمح لك بذلك إعادة تسمية وظيفة موجودة, ، بما في ذلك تلك المدمجة.
إذا قمت بتكوين تثبيت فب في بيئة الاختبار الخاصة بك لتشمل تمديد رونكيت ، سوف تكون قادرة على القيام بهذا النوع من الاختبار.
نأمل أن يساعد.
نصائح أخرى
وجدت حل أبسط.النظر في هذه الفئة: giveacodicetagpre.
سيقوم الاختبار برمي الخطأ الموضح في السؤال ما لم تقم بتعيين التعليق التوضيحي @ runinseparateProcess giveacodicetagpre.
بدلا من محاولة تعيين رؤوس ملفات تعريف الارتباط الفعلية (التي ستفشل لأن المحتوى قد تم إرساله بالفعل)؛لأغراض الاختبار، قد تقوم ببساطة بتعيين ملف تعريف الارتباط Superliclobal بشكل صريح: giveacodicetagpre.