تست های HTTP
معرفی
لاراول یک API بسیار روان برای درخواست HTTP به برنامه شما و بررسی خروجی ارائه می دهد. به عنوان مثال، به تست ویژگی تعریف شده در زیر نگاه کنید:
<?php namespace Tests\Feature; use Illuminate\Foundation\Testing\RefreshDatabase;use Illuminate\Foundation\Testing\WithoutMiddleware;use Tests\TestCase; class ExampleTest extends TestCase{ /** * A basic test example. * * @return void */ public function testBasicTest() { $response = $this->get('/'); $response->assertStatus(200); }}
متد
درخواستی را به برنامه
get
ارسال می کند ، در حالی که
متد ادعا می کند که پاسخ برگشتی باید کد وضعیت HTTP داده شده را داشته باشد.
علاوه بر این ادعای ساده، لاراول حاوی انواع ادعاها برای بررسی سرصفحههای
پاسخ، محتوا، ساختار JSON و موارد دیگر است.
GET
assertStatus
سفارشی کردن هدر درخواست
می توانید از این
withHeaders
روش برای سفارشی کردن هدرهای درخواست قبل از ارسال به برنامه استفاده کنید.
این به شما امکان می دهد تا هر سرفصل سفارشی را که می خواهید به درخواست
اضافه کنید:
<?php class ExampleTest extends TestCase{ /** * A basic functional test example. * * @return void */ public function testBasicExample() { $response = $this->withHeaders([ 'X-Header' => 'Value', ])->json('POST', '/user', ['name' => 'Sally']); $response ->assertStatus(201) ->assertJson([ 'created' => true, ]); }}
میانافزار CSRF بهطور خودکار هنگام اجرای آزمایشها غیرفعال میشود.
بیسکویت ها
می توانید
قبل از درخواست از روش
withCookie
یا برای تنظیم مقادیر کوکی استفاده کنید.
withCookies
متد
withCookie
یک نام کوکی و مقدار را به عنوان دو آرگومان خود می پذیرد، در حالی که
withCookies
متد آرایه ای از جفت نام / مقدار را می پذیرد:
<?php class ExampleTest extends TestCase{ public function testCookies() { $response = $this->withCookie('color', 'blue')->get('/'); $response = $this->withCookies([ 'color' => 'blue', 'name' => 'Taylor', ])->get('/'); }}
پاسخ های اشکال زدایی
پس از ارائه یک درخواست آزمایشی برای برنامه شما، روش های
dump
,
dumpHeaders
و
dumpSession
ممکن است برای بررسی و اشکال زدایی محتوای پاسخ استفاده شود:
<?php namespace Tests\Feature; use Illuminate\Foundation\Testing\RefreshDatabase;use Illuminate\Foundation\Testing\WithoutMiddleware;use Tests\TestCase; class ExampleTest extends TestCase{ /** * A basic test example. * * @return void */ public function testBasicTest() { $response = $this->get('/'); $response->dumpHeaders(); $response->dumpSession(); $response->dump(); }}
جلسه / احراز هویت
لاراول چندین کمک برای کار با جلسه در طول آزمایش HTTP ارائه می دهد.
ابتدا، میتوانید دادههای جلسه را با استفاده از
withSession
روش روی یک آرایه مشخص تنظیم کنید.
این برای بارگیری جلسه با داده ها قبل از صدور درخواست برای برنامه شما مفید
است:
<?php class ExampleTest extends TestCase{ public function testApplication() { $response = $this->withSession(['foo' => 'bar']) ->get('/'); }}
یکی از استفاده های رایج از Session برای حفظ حالت برای کاربر احراز هویت
شده است.
روش
actingAs
کمکی یک راه ساده برای احراز هویت یک کاربر معین به عنوان کاربر فعلی ارائه
می دهد.
به عنوان مثال، ممکن است از یک
کارخانه مدل
برای تولید و احراز هویت یک کاربر استفاده کنیم:
<?php use App\User; class ExampleTest extends TestCase{ public function testApplication() { $user = factory(User::class)->create(); $response = $this->actingAs($user) ->withSession(['foo' => 'bar']) ->get('/'); }}
همچنین میتوانید با ارسال نام محافظ بهعنوان آرگومان دوم در متد، مشخص
کنید که از کدام محافظ برای احراز هویت کاربر استفاده میشود
actingAs
:
$this->actingAs($user, 'api')
تست API های JSON
لاراول همچنین چندین کمک برای آزمایش API های JSON و پاسخ های آنها ارائه می
دهد.
برای مثال، متدهای
json
,
getJson
,
postJson
,
putJson
,
patchJson
,
deleteJson
و
optionsJson
ممکن است برای صدور درخواست های JSON با افعال مختلف HTTP استفاده شوند.
همچنین می توانید به راحتی داده ها و هدرها را به این روش ها منتقل کنید.
برای شروع، بیایید آزمایشی بنویسیم تا درخواستی
POST
را ارائه کنیم
/user
و تأیید کنیم که داده های مورد انتظار برگردانده شده است:
<?php class ExampleTest extends TestCase{ /** * A basic functional test example. * * @return void */ public function testBasicExample() { $response = $this->postJson('/user', ['name' => 'Sally']); $response ->assertStatus(201) ->assertJson([ 'created' => true, ]); }}
این
assertJson
روش پاسخ را به یک آرایه تبدیل میکند وPHPUnit::assertArraySubset
برای تأیید وجود آرایه دادهشده در پاسخ JSON که توسط برنامه برگردانده شده است، استفاده میکند. بنابراین، اگر ویژگی های دیگری در پاسخ JSON وجود داشته باشد، تا زمانی که قطعه داده شده وجود داشته باشد، این آزمایش همچنان با موفقیت انجام می شود.
علاوه بر این، داده های پاسخ JSON ممکن است به عنوان متغیرهای آرایه در پاسخ قابل دسترسی باشند:
$this->assertTrue($response['created']);
تأیید تطابق دقیق JSON
اگر می خواهید تأیید کنید که آرایه داده شده
دقیقاً
مطابق با JSON برگردانده شده توسط برنامه است، باید از
assertExactJson
روش زیر استفاده کنید:
<?php class ExampleTest extends TestCase{ /** * A basic functional test example. * * @return void */ public function testBasicExample() { $response = $this->json('POST', '/user', ['name' => 'Sally']); $response ->assertStatus(201) ->assertExactJson([ 'created' => true, ]); }}
بررسی مسیرهای JSON
اگر می خواهید تأیید کنید که پاسخ JSON حاوی برخی داده های داده شده در یک
مسیر مشخص است، باید از
assertJsonPath
روش استفاده کنید:
<?php class ExampleTest extends TestCase{ /** * A basic functional test example. * * @return void */ public function testBasicExample() { $response = $this->json('POST', '/user', ['name' => 'Sally']); $response ->assertStatus(201) ->assertJsonPath('team.owner.name', 'foo') }}
تست آپلود فایل
کلاس روشی را
Illuminate\Http\UploadedFile
ارائه می دهد
fake
که ممکن است برای تولید فایل های ساختگی یا تصاویر برای آزمایش استفاده شود.
این، همراه با روش
Storage
نما
fake
، آزمایش بارگذاری فایل را بسیار ساده می کند.
برای مثال، میتوانید این دو ویژگی را برای آزمایش آسان فرم آپلود آواتار
ترکیب کنید:
<?php namespace Tests\Feature; use Illuminate\Foundation\Testing\RefreshDatabase;use Illuminate\Foundation\Testing\WithoutMiddleware;use Illuminate\Http\UploadedFile;use Illuminate\Support\Facades\Storage;use Tests\TestCase; class ExampleTest extends TestCase{ public function testAvatarUpload() { Storage::fake('avatars'); $file = UploadedFile::fake()->image('avatar.jpg'); $response = $this->json('POST', '/avatar', [ 'avatar' => $file, ]); // Assert the file was stored... Storage::disk('avatars')->assertExists($file->hashName()); // Assert a file does not exist... Storage::disk('avatars')->assertMissing('missing.jpg'); }}
سفارشی سازی فایل جعلی
هنگام ایجاد فایل ها با استفاده از این
fake
روش، می توانید عرض، ارتفاع و اندازه تصویر را مشخص کنید تا قوانین
اعتبارسنجی خود را بهتر آزمایش کنید:
UploadedFile::fake()->image('avatar.jpg', $width, $height)->size(100);
علاوه بر ایجاد تصاویر، می توانید با استفاده از
create
روش زیر فایل هایی از هر نوع دیگری ایجاد کنید:
UploadedFile::fake()->create('document.pdf', $sizeInKilobytes);
در صورت نیاز، میتوانید یک
$mimeType
آرگومان به متد ارسال کنید تا نوع MIME را که باید توسط فایل برگردانده شود،
به صراحت تعریف کنید:
UploadedFile::fake()->create('document.pdf', $sizeInKilobytes, 'application/pdf');
ادعاهای موجود
اظهارات پاسخ
لاراول انواع مختلفی از روشهای ادعای سفارشی را برای تستهای ویژگی
PHPUnit
شما ارائه میکند .
این ادعاها ممکن است در پاسخی که از روشهای آزمایشی
json
،
get
,
post
,
put
, و برگردانده میشود قابل دسترسی باشد
delete
:
عنوان کوکی assertCookie Expired assertCookieNot Expired اظهار کوکی گم شده است ادعا ایجاد شد ادعا کنید ببینید assertDontSeeText ادعای ExactJson ادعا ممنوع assertHeader assertHeader Missing ادعای جیسون ادعای JsonCount assertJsonFragment ادعای Json گم شده است assertJsonMissingExact assertJsonMissingValidationErrors assertJsonPath assertJsonStructure assertJsonValidationErrors تعیین مکان اظهار بدون محتوا assertNotFound اظهارت Ok assertPlainCookie assertRedirect ادعا ببینید assertSeeInOrder assertSeeText assertSeeTextInOrder assertSessionHas assertSessionHasInput assertSessionHasAll assertSessionHasErrors assertSessionHasErrorsIn assertSessionHasNoErrors assertSessionDoesntHaveErrors assertSession Missing اظهار وضعیت ادعای موفقیت آمیز ادعای غیر مجاز assertViewHas assertViewHasAll assertViewIs assertView Missing
عنوان کوکی
ادعا کنید که پاسخ حاوی کوکی داده شده است:
$response->assertCookie($cookieName, $value = null);
assertCookie Expired
ادعا کنید که پاسخ حاوی کوکی داده شده است و منقضی شده است:
$response->assertCookieExpired($cookieName);
assertCookieNot Expired
ادعا کنید که پاسخ حاوی کوکی داده شده است و منقضی نشده است:
$response->assertCookieNotExpired($cookieName);
اظهار کوکی گم شده است
ادعا کنید که پاسخ حاوی کوکی داده شده نیست:
$response->assertCookieMissing($cookieName);
ادعا ایجاد شد
ادعا کنید که پاسخ دارای کد وضعیت 201 است:
$response->assertCreated();
ادعا کنید ببینید
ادعا کنید که رشته داده شده در پاسخ موجود نیست.
این ادعا به طور خودکار از رشته داده شده فرار می کند مگر اینکه آرگومان
دومی را ارسال کنید
false
:
$response->assertDontSee($value, $escaped = true);
assertDontSeeText
ادعا کنید که رشته داده شده در متن پاسخ موجود نیست.
این ادعا به طور خودکار از رشته داده شده فرار می کند مگر اینکه آرگومان
دومی را ارسال کنید
false
:
$response->assertDontSeeText($value, $escaped = true);
ادعای ExactJson
ادعا کنید که پاسخ حاوی تطابق دقیق با دادههای JSON است:
$response->assertExactJson(array $data);
ادعا ممنوع
ادعا کنید که پاسخ دارای کد وضعیت ممنوعه (403) است:
$response->assertForbidden();
assertHeader
ادعا کنید که هدر داده شده در پاسخ وجود دارد:
$response->assertHeader($headerName, $value = null);
assertHeader Missing
ادعا کنید که هدر داده شده در پاسخ وجود ندارد:
$response->assertHeaderMissing($headerName);
ادعای جیسون
ادعا کنید که پاسخ حاوی دادههای JSON است:
$response->assertJson(array $data, $strict = false);
ادعای JsonCount
ادعا کنید که پاسخ JSON دارای یک آرایه با تعداد مورد انتظار در کلید داده شده است:
$response->assertJsonCount($count, $key = null);
assertJsonFragment
ادعا کنید که پاسخ شامل قطعه JSON داده شده است:
$response->assertJsonFragment(array $data);
ادعای Json گم شده است
ادعا کنید که پاسخ شامل قطعه JSON داده شده نیست:
$response->assertJsonMissing(array $data);
assertJsonMissingExact
ادعا کنید که پاسخ شامل قطعه JSON دقیق نیست:
$response->assertJsonMissingExact(array $data);
assertJsonMissingValidationErrors
ادعا کنید که پاسخ هیچ خطای اعتبارسنجی JSON برای کلیدهای داده شده ندارد:
$response->assertJsonMissingValidationErrors($keys);
assertJsonPath
ادعا کنید که پاسخ حاوی داده های داده شده در مسیر مشخص شده است:
$response->assertJsonPath($path, array $data, $strict = false);
assertJsonStructure
ادعا کنید که پاسخ دارای ساختار JSON داده شده است:
$response->assertJsonStructure(array $structure);
assertJsonValidationErrors
ادعا کنید که پاسخ دارای خطاهای اعتبارسنجی JSON داده شده است:
$response->assertJsonValidationErrors(array $data);
تعیین مکان
ادعا کنید که پاسخ دارای مقدار URI داده شده در
Location
هدر است:
$response->assertLocation($uri);
اظهار بدون محتوا
ادعا کنید که پاسخ دارای کد وضعیت داده شده است و محتوایی ندارد.
$response->assertNoContent($status = 204);
assertNotFound
ادعا کنید که پاسخ دارای کد وضعیت یافت نشده است:
$response->assertNotFound();
اظهارت Ok
ادعا کنید که پاسخ دارای کد وضعیت 200 است:
$response->assertOk();
assertPlainCookie
ادعا کنید که پاسخ حاوی کوکی داده شده است (رمزگذاری نشده):
$response->assertPlainCookie($cookieName, $value = null);
assertRedirect
ادعا کنید که پاسخ یک تغییر مسیر به یک URI معین است:
$response->assertRedirect($uri);
ادعا ببینید
ادعا کنید که رشته داده شده در پاسخ موجود است.
این ادعا به طور خودکار از رشته داده شده فرار می کند مگر اینکه آرگومان
دومی را ارسال کنید
false
:
$response->assertSee($value, $escaped = true);
assertSeeInOrder
ادعا کنید که رشته های داده شده به ترتیب در پاسخ قرار دارند.
این ادعا به طور خودکار از رشته های داده شده فرار می کند مگر اینکه آرگومان
دومی را ارسال کنید
false
:
$response->assertSeeInOrder(array $values, $escaped = true);
assertSeeText
ادعا کنید که رشته داده شده در متن پاسخ موجود است.
این ادعا به طور خودکار از رشته داده شده فرار می کند مگر اینکه آرگومان
دومی را ارسال کنید
false
:
$response->assertSeeText($value, $escaped = true);
assertSeeTextInOrder
ادعا کنید که رشته های داده شده به ترتیب در متن پاسخ قرار دارند.
این ادعا به طور خودکار از رشته های داده شده فرار می کند مگر اینکه آرگومان
دومی را ارسال کنید
false
:
$response->assertSeeTextInOrder(array $values, $escaped = true);
assertSessionHas
ادعا کنید که جلسه شامل قطعه داده شده است:
$response->assertSessionHas($key, $value = null);
assertSessionHasInput
ادعا کنید که جلسه دارای مقدار مشخصی در آرایه ورودی فلش شده است:
$response->assertSessionHasInput($key, $value = null);
assertSessionHasAll
ادعا کنید که جلسه دارای لیستی از مقادیر است:
$response->assertSessionHasAll(array $data);
assertSessionHasErrors
ادعا کنید که جلسه حاوی خطای داده شده است
$keys
.
اگر
$keys
یک آرایه انجمنی است، بیان کنید که جلسه حاوی یک پیام خطای خاص (مقدار) برای
هر فیلد (کلید) است:
$response->assertSessionHasErrors(array $keys, $format = null, $errorBag = 'default');
assertSessionHasErrorsIn
ادعا کنید که جلسه حاوی خطای داده شده
$keys
در یک کیسه خطای خاص است.
اگر
$keys
یک آرایه انجمنی است، ادعا کنید که جلسه حاوی یک پیام خطای خاص (مقدار) برای
هر فیلد (کلید)، در کیسه خطا است:
$response->assertSessionHasErrorsIn($errorBag, $keys = [], $format = null);
assertSessionHasNoErrors
تاکید کنید که جلسه هیچ خطایی ندارد:
$response->assertSessionHasNoErrors();
assertSessionDoesntHaveErrors
ادعا کنید که جلسه هیچ خطایی برای کلیدهای داده شده ندارد:
$response->assertSessionDoesntHaveErrors($keys = [], $format = null, $errorBag = 'default');
assertSession Missing
ادعا کنید که جلسه شامل کلید داده شده نیست:
$response->assertSessionMissing($key);
اظهار وضعیت
ادعا کنید که پاسخ دارای کد داده شده است:
$response->assertStatus($code);
ادعای موفقیت آمیز
ادعا کنید که پاسخ دارای کد وضعیت موفق (>= 200 و < 300) است:
$response->assertSuccessful();
ادعای غیر مجاز
ادعا کنید که پاسخ دارای کد وضعیت غیرمجاز (401) است:
$response->assertUnauthorized();
assertViewHas
ادعا کنید که نمای پاسخ بخشی از داده داده شده است:
$response->assertViewHas($key, $value = null);
علاوه بر این، دادههای مشاهده ممکن است به عنوان متغیرهای آرایه در پاسخ قابل دسترسی باشند:
$this->assertEquals('Taylor', $response['name']);
assertViewHasAll
ادعا کنید که نمای پاسخ دارای یک لیست داده شده است:
$response->assertViewHasAll(array $data);
assertViewIs
ادعا کنید که نمای داده شده توسط مسیر برگردانده شده است:
$response->assertViewIs($value);
assertView Missing
ادعا کنید که نمای پاسخ دارای یک قطعه داده محدود شده است:
$response->assertViewMissing($key);
اظهارات احراز هویت
لاراول همچنین انواع مختلفی از ادعاهای مربوط به احراز هویت را برای تست های ویژگی PHPUnit شما ارائه می دهد :
روش | شرح |
---|---|
$this->assertAuthenticated($guard = null); |
ادعا کنید که کاربر احراز هویت شده است. |
$this->assertGuest($guard = null); |
ادعا کنید که کاربر احراز هویت نشده است. |
$this->assertAuthenticatedAs($user, $guard = null); |
ادعا کنید که کاربر مورد نظر احراز هویت شده است. |
$this->assertCredentials(array $credentials, $guard = null); |
تأیید کنید که اعتبارنامه های داده شده معتبر هستند. |
$this->assertInvalidCredentials(array $credentials, $guard = null); |
ادعا کنید که اعتبار داده شده نامعتبر است. |