اگر شما هم از اون برنامهنویسها هستید که برای کدهاتون تست می نویسید، مطمئنا نیازمند این هستید که موقع تست از دیتای واقعی و دیتابیس واقعی استافده کنید و رفتار برنامهتونو در هنگام کار با دیتابیس ببنید بدون اینکه دیتابیس اصلی برنامه تون مشکلی براش پیش بیاد و دستخوش تغییرات بشه.
خب برای این کار تو لاراول باید یه سری تنظیمات انجام بدیم که خیلی راحته. اگر دایرکتوری config رو توی پروژهتون نگاه کنید میبینید که شامل چند تا زیر دایرکتوریه که یکیش به نام testing ـه. تو این فولدر ما تنظیماتی رو قرار میدیم که در هنگام اجرای تستها به کمکمون میاد و محیط تست این تنظیمات رو در اولویت استفاده قرار میده. به طور پیشفرض یک فایل app.php و یک فایل database.php قرار داره توش.
من برای تست از دیتابیس sqlite استفاده میکنم. پس محتویات فایل دیتابیس رو به این شکل تغییر میدیم:
return array( 'default' => 'sqlite', 'connections' => array( 'sqlite' => array( 'driver' => 'sqlite', 'database' => ':memory:', 'prefix' => '', ), ) );
اگه توجه کنید میبینید که تو قسمت آدرس فایل دیتابیس نوشتیم :memory: یعنی اینکه این دیتابیس به صورت فیزیکی در جایی وجود نداره و فقط هنگام اجرای تستها در حافظه ساخته میشه و پس از پایان تست دیگه اثری ازش وجود نداره.
خب این شد تنظیمات دیتابیسمون. حالا برای انجام هر تست باید دو تا متد رو توی کلاس تستتون override کنید به این صورت:
public function setUp() { parent::setUp(); //call migrations Artisan::call("migrate"); } public function tearDown() { parent::tearDown(); Artisan::call("migrate:rollback"); }
متد setUp در هنگام اجرای تست فراخوانی میشه و توش میایم و به وسیله کلاس Artisan دستور migrate رو اجرا میکنیم تا جداول دیتابیسمون ساخته بشن.
متد tearDown هم پس از پایان تستها فراخوانی میشه و ما میاییم همه چیو تو دیبابیس به حالت اولش برمیگردونیم توسط دستور migrate:rollback.
حالا به راحتی میتونید تستهاتونو بنویسید و با دیتابیس واقعی سر و کله بزنید.
تذکر
احتمال داره در هنگام اجرای تست با خطایی با این مضمون که درایوری برای دیتابیس پیدا نشد مواجه بشید. و این به خاطر اینه که اکستنشن sqlite برای php نصب نیست. برای این کار توی اوبونتو فقط کافیه دستور زیر را توی ترمینال اجرا کنیم:
sudo apt-get install php5-sqlite
بعد از این دستور sqlite برای php5 نصب شده و فعال میشود.