سؤال

أحاول إجراء بعض اختبارات الوحدة باستخدام وظيفة سيتكوكي () في بيئة تطوير متكاملة جيدة فبستورم.ولكن أحصل على الخطأ التالي في كل مرة:

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.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top