اگر شما هم از اون برنامهنویسها هستید که برای کدهاتون تست می نویسید، مطمئنا نیازمند این هستید که موقع تست از دیتای واقعی و دیتابیس واقعی استافده کنید و رفتار برنامهتونو در هنگام کار با دیتابیس ببنید بدون اینکه دیتابیس اصلی برنامه تون مشکلی براش پیش بیاد و دستخوش تغییرات بشه.
خب برای این کار تو لاراول باید یه سری تنظیمات انجام بدیم که خیلی راحته. اگر دایرکتوری config رو توی پروژهتون نگاه کنید میبینید که شامل چند تا زیر دایرکتوریه که یکیش به نام testing ـه. تو این فولدر ما تنظیماتی رو قرار میدیم که در هنگام اجرای تستها به کمکمون میاد و محیط تست این تنظیمات رو در اولویت استفاده قرار میده. به طور پیشفرض یک فایل app.php و یک فایل database.php قرار داره توش.
من برای تست از دیتابیس sqlite استفاده میکنم. پس محتویات فایل دیتابیس رو به این شکل تغییر میدیم:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
return array( 'default' => 'sqlite', 'connections' => array( 'sqlite' => array( 'driver' => 'sqlite', 'database' => ':memory:', 'prefix' => '', ), ) ); |
اگه توجه کنید میبینید که تو قسمت آدرس فایل دیتابیس نوشتیم :memory: یعنی اینکه این دیتابیس به صورت فیزیکی در جایی وجود نداره و فقط هنگام اجرای تستها در حافظه ساخته میشه و پس از پایان تست دیگه اثری ازش وجود نداره.
خب این شد تنظیمات دیتابیسمون. حالا برای انجام هر تست باید دو تا متد رو توی کلاس تستتون override کنید به این صورت:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
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 نصب نیست. برای این کار توی اوبونتو فقط کافیه دستور زیر را توی ترمینال اجرا کنیم:
1 |
sudo apt-get install php5-sqlite |
بعد از این دستور sqlite برای php5 نصب شده و فعال میشود.
سلام
لطفا بیشتر در مورد لاراول و ترفندهاش بنویسید.
حتما همین کارو میکنم. بیشتر منتظرم لاراول ۵ منتشر بشه تا بیشتر در مورد اون بنویسم
به نظرم یه مایگرت reset تو setup کمه
چون همه تیبلها رو همزمان میسازه فرق نمیکنه rollback باشه یا reset
همین چند روز پیش بود با تست تو لاراول و کد سپت آشنا شدم یکی از سوال هام در مورد دیتا بیسش بود ، میشه از sqlite برای تست و از mysql جدا برای پروژه استفاده کرد؟
بله امکانش هست. شما میتونید با ایجاد تنظیمات برای محیطهای مختلف، این کارو انجام بدید.
بسیار آموزنده بود سپاس