آزمایش کردن
- معرفی
- تعریف و اجرای تست ها
- محیط آزمایش
- فراخوانی مسیرهای آزمایشی
- نماهای تقلید
- ادعاهای چارچوب
- روش های کمکی
- تازه کردن برنامه
معرفی
لاراول با در نظر گرفتن تست واحد ساخته شده است.
در واقع، پشتیبانی از آزمایش با PHPUnit خارج از جعبه گنجانده شده است، و یک
phpunit.xml
فایل از قبل برای برنامه شما تنظیم شده است.
نمونه فایل آزمایشی در
tests
دایرکتوری ارائه شده است.
پس از نصب یک برنامه جدید لاراول، به سادگی
phpunit
در خط فرمان اجرا کنید تا تست های خود را اجرا کنید.
تعریف و اجرای تست ها
برای ایجاد یک تست، به سادگی یک فایل آزمایشی جدید در
tests
دایرکتوری ایجاد کنید.
کلاس آزمون باید گسترش یابد
TestCase
.
سپس میتوانید روشهای تست را همانطور که معمولاً هنگام استفاده از PHPUnit تعریف میکنید، تعریف کنید.
یک کلاس آزمایشی نمونه
class FooTest extends TestCase { public function testSomethingIsTrue() { $this->assertTrue(true); } }
شما می توانید با اجرای دستور از ترمینال خود، تمام تست های برنامه خود را اجرا کنید
phpunit
.
توجه: اگر روش خود را تعریف می کنید
setUp
، حتماً تماس بگیریدparent::setUp
.
محیط آزمایش
هنگام اجرای تست های واحد، لاراول به طور خودکار محیط پیکربندی را روی
testing
.
همچنین لاراول شامل فایل های پیکربندی برای
session
و
cache
در محیط تست می باشد.
array
هر دوی این درایورها در محیط تست
تنظیم شدهاند ، به این معنی که هیچ دادهای از جلسه یا حافظه پنهان در حین آزمایش باقی نمیماند.
در صورت لزوم می توانید تنظیمات محیط آزمایشی دیگری را ایجاد کنید.
متغیرهای
testing
محیطی ممکن است در فایل پیکربندی شوند
phpunit.xml
.
فراخوانی مسیرهای آزمایشی
فراخوانی یک مسیر از آزمون
با استفاده از روش زیر می توانید به راحتی با یکی از مسیرهای خود برای آزمایش تماس بگیرید
call
:
$response = $this->call('GET', 'user/profile'); $response = $this->call($method, $uri, $parameters, $cookies, $files, $server, $content);
سپس می توانید
Illuminate\Http\Response
شی را بررسی کنید:
$this->assertEquals('Hello World', $response->getContent());
فراخوانی یک کنترلر از یک تست
همچنین می توانید از یک آزمایش با یک کنترلر تماس بگیرید:
$response = $this->action('GET', 'HomeController@index'); $response = $this->action('GET', 'UserController@profile', ['user' => 1]);
توجه: هنگام استفاده از متد، نیازی به تعیین فضای نام کامل کنترلر نیست
action
. فقط بخشی از نام کلاس را مشخص کنید که پس ازApp\Http\Controllers
فضای نام قرار می گیرد.
این
getContent
روش محتوای رشته ارزیابی شده پاسخ را برمی گرداند.
اگر مسیر شما یک را برگرداند
View
، می توانید با استفاده از
original
ویژگی به آن دسترسی داشته باشید:
$view = $response->original; $this->assertEquals('John', $view['name']);
برای فراخوانی مسیر HTTPS، میتوانید از
callSecure
روش زیر استفاده کنید:
$response = $this->callSecure('GET', 'foo/bar');
نماهای تقلید
هنگام آزمایش، ممکن است اغلب بخواهید تماس با نمای استاتیک لاراول را تقلید کنید. به عنوان مثال، عمل کنترلر زیر را در نظر بگیرید:
public function getIndex(){ Event::fire('foo', ['name' => 'Dayle']); return 'All done!';}
Event
ما میتوانیم با استفاده از متد روی نما
، فراخوانی کلاس را تقلید کنیم ، که نمونهای از یک Mocky
Mocky
shouldReceive
را برمیگرداند
.
تقلید یک نما
public function testGetIndex(){ Event::shouldReceive('fire')->once()->with('foo', ['name' => 'Dayle']); $this->call('GET', '/');}
توجه: نباید
Request
نما را تقلید کنید.call
در عوض، هنگام اجرای آزمون، ورودی مورد نظر خود را به روش ارسال کنید .
ادعاهای چارچوب
لاراول چندین
assert
روش را برای آسانتر کردن آزمایش ارائه میکند:
ادعای پاسخ ها درست است
public function testMethod(){ $this->call('GET', '/'); $this->assertResponseOk();}
اظهار وضعیت پاسخ
$this->assertResponseStatus(403);
ادعای پاسخ ها تغییر مسیر هستند
$this->assertRedirectedTo('foo'); $this->assertRedirectedToRoute('route.name'); $this->assertRedirectedToAction('Controller@method');
ادعای نما مقداری داده دارد
public function testMethod(){ $this->call('GET', '/'); $this->assertViewHas('name'); $this->assertViewHas('age', $value);}
ادعای جلسه دارای مقداری داده است
public function testMethod(){ $this->call('GET', '/'); $this->assertSessionHas('name'); $this->assertSessionHas('age', $value);}
ادعای جلسه دارای خطا است
public function testMethod(){ $this->call('GET', '/'); $this->assertSessionHasErrors(); // Asserting the session has errors for a given key... $this->assertSessionHasErrors('name'); // Asserting the session has errors for several keys... $this->assertSessionHasErrors(['name', 'age']);}
ادعای ورودی قدیمی مقداری داده دارد
public function testMethod(){ $this->call('GET', '/'); $this->assertHasOldInput();}
روش های کمکی
این
TestCase
کلاس شامل چندین روش کمکی برای آسانتر کردن آزمایش برنامه شما است.
تنظیم و شستشوی جلسات از آزمون ها
$this->session(['foo' => 'bar']); $this->flushSession();
تنظیم کاربر تأیید شده فعلی
می توانید کاربر تأیید شده فعلی را با استفاده از
be
روش زیر تنظیم کنید:
$user = new User(['name' => 'John']); $this->be($user);
بذر مجدد پایگاه داده از آزمایشات
شما می توانید پایگاه داده خود را از یک آزمایش با استفاده از روش زیر دوباره بکار ببرید
seed
:
$this->seed(); $this->seed('DatabaseSeeder');
اطلاعات بیشتر در مورد ایجاد دانهها را میتوانید در بخش مهاجرت و کاشت مستندات بیابید .
تازه کردن برنامه
همانطور که قبلاً می دانید، می توانید از طریق هر روش آزمایشی به برنامه (
محفظه خدمات
) خود دسترسی داشته باشید
$this->app
.
این نمونه کانتینر سرویس برای هر کلاس آزمایشی به روز می شود.
اگر میخواهید بهطور دستی برنامه را مجبور کنید برای یک روش معین بهروزرسانی شود، میتوانید
refreshApplication
از روش روش آزمایشی خود استفاده کنید.
با این کار هرگونه اتصال اضافی، مانند mock، که از زمان شروع آزمایش در کانتینر IoC قرار گرفته اند، بازنشانی می شود.