۱۲ سینا علیزاده
کار نکردن متد __call
جامعه پی اچ پی ایجاد شده در ۲۳ اسفند ۱۴۰۱

استاد در ترمینال من فقط فیلد شدن تست رو نشون میده وا چیزی دامپ نمیکنه!

سلام سینا عزیز

اگر PHPUnit نتواند خروجی "var_dump()" یا "dd()" را هنگام شکست تست نشان دهد، ممکن است به این دلیل باشد که PHPUnit به گونه‌ای پیکربندی شده است که در اولین شکست یا خطا متوقف شود.

برای رفع این مشکل، می‌توانید گزینه «-stop-on-failure=false» را هنگام اجرای PHPUnit اضافه کنید. این به PHPUnit می‌گوید حتی در صورت شکست تست یا خطای تست به اجرای تست‌ها ادامه دهد و به شما امکان می‌دهد خروجی "var_dump()" یا "dd()" را ببینید.

به عنوان مثال، می‌توانید PHPUnit را به این صورت اجرا کنید تا گزینه "stop-on-failure" را غیرفعال کنید:

vendor/bin/phpunit --stop-on-failure=false

همچنین، می‌توانید ویژگی "stopOnFailure="false"" را به فایل پیکربندی PHPUnit خود اضافه کنید، مانند این:

<phpunit stopOnFailure="false">
    

این گزینه "stop-on-failure" را غیرفعال می‌کند و به شما امکان می‌دهد خروجی "var_dump()" یا "dd()" را در صورت شکست تستی مشاهده کنید.

احمدرضا فاطمی کیا ۲۳ اسفند ۱۴۰۱، ۱۶:۴۳

استاد فایل PHPUnit.xml به بطور پیش فرض این ویژگی رو داره.

اما باز هم در حالت false و هم true متد دامپ نشد!!

سینا علیزاده ۲۳ اسفند ۱۴۰۱، ۱۶:۴۷

از کدتون اسکرین قرار بدید

احمدرضا فاطمی کیا ۲۳ اسفند ۱۴۰۱، ۱۷:۰۸

436f-Screenshot 2023-03-14 214433.jpg


سینا علیزاده ۲۳ اسفند ۱۴۰۱، ۱۸:۲۰

9c27-Screenshot 2023-03-14 214509.jpg

سینا علیزاده ۲۳ اسفند ۱۴۰۱، ۱۸:۲۰

بعد از قراردادن stoponfailure دستور زیر رو باید وارد کنید:

vendor/bin/phpunit --migrate-configuration
احمدرضا فاطمی کیا ۲۳ اسفند ۱۴۰۱، ۱۸:۴۷

از قبل وجود داشت اما بازم دستور رو زدم و فرقی نکرد

سینا علیزاده ۲۳ اسفند ۱۴۰۱، ۱۹:۰۰

سلام،

پروژت رو آپلود کن تا تست کنم.

محسن موحد ۲۳ اسفند ۱۴۰۱، ۱۹:۲۴

خدمت شما

سینا علیزاده ۲۳ اسفند ۱۴۰۱، ۲۱:۵۸

با توجه به خطایی که phpunit میده مشخص میشه که داخل کلاس User متد setFirstName تعریف نشده:

public function setFirstName($FirstName)
{
    $this->First_Name = trim($FirstName) ;
}

بعد از اجرا یک warning هم بخاطر متد TwoPlusTwo داخل کلاس ExampleTest دریافت میکنید که به شکل درستی باید تعریف شود مثلا به شکل testTwoPlusTwo

محسن موحد ۲۴ اسفند ۱۴۰۱، ۲۱:۲۵

استاد، هدف این بود که متدی که وجود نداره رو صدا بزنیم که __call فعال بشه وگرنه قبل این موضوع تست‌ها بدرستی کار میکردن!!

سینا علیزاده ۲۴ اسفند ۱۴۰۱، ۲۱:۳۴

بله الان متوجه شدم،

تو این نسخه جدید verbose پشتیبانی نمیشه(مربوط به تاپیک قبل)

میتونی از دستور ob_flush() بعد از dump استفاده کنی تا بافر خروجی ارسال بشه. (یا اینکه بافر خروجی را غیرفعال کنید)

در موردش داخل نت مقاله نوشته شده.

public function __call($method, $arguments)
{
        var_dump('====================================') ;
        var_dump($method) ;
        var_dump('====================================') ;
        ob_flush();
}

اینجا exit هم میتونی بنویسید.

بهترین پاسخ
محسن موحد ۲۴ اسفند ۱۴۰۱، ۲۲:۳۲