تست های HTTP
معرفی
لاراول یک API بسیار روان برای درخواست HTTP به برنامه شما و بررسی پاسخ ها ارائه می دهد. به عنوان مثال، به تست ویژگی تعریف شده در زیر نگاه کنید:
<?php test('the application returns a successful response', function () { $response = $this->get('/'); $response->assertStatus(200);});
<?php namespace Tests\Feature; use Tests\TestCase; class ExampleTest extends TestCase{ /** * A basic test example. */ public function test_the_application_returns_a_successful_response(): void { $response = $this->get('/'); $response->assertStatus(200); }}
متد
درخواستی را به برنامه
get
ارسال می کند ، در حالی که
متد ادعا می کند که پاسخ برگشتی باید کد وضعیت HTTP داده شده را داشته باشد. علاوه بر این ادعای ساده، لاراول حاوی انواع ادعاها برای بررسی سرصفحههای پاسخ، محتوا، ساختار JSON و موارد دیگر است.
GET
assertStatus
درخواست ها
برای ارسال درخواست به برنامه خود، می توانید از
get
,
post
,
, یا روش های
put
موجود
در آزمون خود استفاده کنید. این روش ها در واقع یک درخواست HTTP «واقعی» برای برنامه شما صادر نمی کنند. در عوض، کل درخواست شبکه به صورت داخلی شبیه سازی می شود.
patch
delete
روشهای درخواست تست به جای برگرداندن یک
Illuminate\Http\Response
نمونه، نمونهای از را برمیگردانند
Illuminate\Testing\TestResponse
که
انواع ادعاهای مفیدی را
ارائه میدهد که به شما امکان میدهد پاسخهای برنامه خود را بررسی کنید:
<?php test('basic request', function () { $response = $this->get('/'); $response->assertStatus(200);});
<?php namespace Tests\Feature; use Tests\TestCase; class ExampleTest extends TestCase{ /** * A basic test example. */ public function test_a_basic_request(): void { $response = $this->get('/'); $response->assertStatus(200); }}
به طور کلی، هر یک از آزمون های شما باید فقط یک درخواست از برنامه شما داشته باشد. اگر چندین درخواست در یک روش آزمایشی اجرا شوند، ممکن است رفتار غیرمنتظره ای رخ دهد.
برای راحتی، میان افزار CSRF به طور خودکار هنگام اجرای آزمایش ها غیرفعال می شود.
سفارشی سازی هدرهای درخواست
می توانید از این
withHeaders
روش برای سفارشی کردن هدرهای درخواست قبل از ارسال به برنامه استفاده کنید. این روش به شما این امکان را می دهد که هر سرفصل سفارشی را که می خواهید به درخواست اضافه کنید:
<?php test('interacting with headers', function () { $response = $this->withHeaders([ 'X-Header' => 'Value', ])->post('/user', ['name' => 'Sally']); $response->assertStatus(201);});
<?php namespace Tests\Feature; use Tests\TestCase; class ExampleTest extends TestCase{ /** * A basic functional test example. */ public function test_interacting_with_headers(): void { $response = $this->withHeaders([ 'X-Header' => 'Value', ])->post('/user', ['name' => 'Sally']); $response->assertStatus(201); }}
بیسکویت ها
می توانید
قبل از درخواست از روش
withCookie
یا برای تنظیم مقادیر کوکی استفاده کنید.
withCookies
متد
withCookie
یک نام کوکی و مقدار را به عنوان دو آرگومان خود می پذیرد، در حالی که
withCookies
متد آرایه ای از جفت نام / مقدار را می پذیرد:
<?php test('interacting with cookies', function () { $response = $this->withCookie('color', 'blue')->get('/'); $response = $this->withCookies([ 'color' => 'blue', 'name' => 'Taylor', ])->get('/'); //});
<?php namespace Tests\Feature; use Tests\TestCase; class ExampleTest extends TestCase{ public function test_interacting_with_cookies(): void { $response = $this->withCookie('color', 'blue')->get('/'); $response = $this->withCookies([ 'color' => 'blue', 'name' => 'Taylor', ])->get('/'); // }}
جلسه / احراز هویت
لاراول چندین کمک برای تعامل با جلسه در طول آزمایش HTTP فراهم می کند. ابتدا، میتوانید دادههای جلسه را با استفاده از
withSession
روش روی یک آرایه مشخص تنظیم کنید. این برای بارگیری جلسه با داده ها قبل از صدور درخواست برای برنامه شما مفید است:
<?php test('interacting with the session', function () { $response = $this->withSession(['banned' => false])->get('/'); //});
<?php namespace Tests\Feature; use Tests\TestCase; class ExampleTest extends TestCase{ public function test_interacting_with_the_session(): void { $response = $this->withSession(['banned' => false])->get('/'); // }}
جلسه لاراول معمولاً برای حفظ وضعیت کاربر تأیید شده فعلی استفاده می شود. بنابراین،
actingAs
روش کمکی یک راه ساده برای احراز هویت یک کاربر معین به عنوان کاربر فعلی ارائه می دهد. به عنوان مثال، ممکن است از یک
کارخانه مدل
برای تولید و احراز هویت یک کاربر استفاده کنیم:
<?php use App\Models\User; test('an action that requires authentication', function () { $user = User::factory()->create(); $response = $this->actingAs($user) ->withSession(['banned' => false]) ->get('/'); //});
<?php namespace Tests\Feature; use App\Models\User;use Tests\TestCase; class ExampleTest extends TestCase{ public function test_an_action_that_requires_authentication(): void { $user = User::factory()->create(); $response = $this->actingAs($user) ->withSession(['banned' => false]) ->get('/'); // }}
همچنین میتوانید با ارسال نام نگهبان به عنوان آرگومان دوم به متد، تعیین کنید که از کدام محافظ برای احراز هویت کاربر استفاده شود
actingAs
. محافظی که به
actingAs
روش ارائه می شود نیز در طول مدت آزمایش به محافظ پیش فرض تبدیل می شود:
$this->actingAs($user, 'web')
پاسخ های اشکال زدایی
پس از ارائه یک درخواست آزمایشی برای برنامه شما، روش های
dump
,
dumpHeaders
و
dumpSession
ممکن است برای بررسی و اشکال زدایی محتوای پاسخ استفاده شود:
<?php test('basic test', function () { $response = $this->get('/'); $response->dumpHeaders(); $response->dumpSession(); $response->dump();});
<?php namespace Tests\Feature; use Tests\TestCase; class ExampleTest extends TestCase{ /** * A basic test example. */ public function test_basic_test(): void { $response = $this->get('/'); $response->dumpHeaders(); $response->dumpSession(); $response->dump(); }}
از طرف دیگر، میتوانید از روشهای
dd
،
ddHeaders
و
ddSession
برای حذف اطلاعات مربوط به پاسخ و سپس توقف اجرا استفاده کنید:
<?php test('basic test', function () { $response = $this->get('/'); $response->ddHeaders(); $response->ddSession(); $response->dd();});
<?php namespace Tests\Feature; use Tests\TestCase; class ExampleTest extends TestCase{ /** * A basic test example. */ public function test_basic_test(): void { $response = $this->get('/'); $response->ddHeaders(); $response->ddSession(); $response->dd(); }}
رسیدگی به استثنا
گاهی اوقات ممکن است بخواهید آزمایش کنید که برنامه شما یک استثنا خاص را ایجاد می کند. برای اطمینان از اینکه استثنا توسط کنترل کننده استثنای لاراول گرفتار نمی شود و به عنوان پاسخ HTTP برگردانده نمی شود، می توانید
withoutExceptionHandling
قبل از درخواست خود از روش استفاده کنید:
$response = $this->withoutExceptionHandling()->get('/');
علاوه بر این، اگر میخواهید مطمئن شوید که برنامه شما از ویژگیهایی استفاده نمیکند که توسط زبان PHP یا کتابخانههایی که برنامه شما استفاده میکند منسوخ شدهاند، میتوانید
withoutDeprecationHandling
قبل از درخواست خود از روش استفاده کنید. هنگامی که مدیریت منسوخ شدن غیرفعال است، هشدارهای منسوخ شدن به استثنا تبدیل میشوند و در نتیجه باعث شکست تست شما میشوند:
$response = $this->withoutDeprecationHandling()->get('/');
این
assertThrows
روش ممکن است برای ادعای اینکه کد در یک بسته معین استثنایی از نوع مشخص شده ایجاد می کند استفاده شود:
$this->assertThrows( fn () => (new ProcessOrder)->execute(), OrderInvalid::class);
تست API های JSON
لاراول همچنین چندین کمک برای آزمایش API های JSON و پاسخ های آنها ارائه می دهد. برای مثال، متدهای
json
,
getJson
,
postJson
,
putJson
,
patchJson
,
deleteJson
و
optionsJson
ممکن است برای صدور درخواست های JSON با افعال مختلف HTTP استفاده شوند. همچنین می توانید به راحتی داده ها و هدرها را به این روش ها منتقل کنید. برای شروع، بیایید آزمایشی بنویسیم تا
POST
درخواستی برای آن ارسال کنیم
/api/user
و تأیید کنیم که دادههای مورد انتظار JSON برگردانده شده است:
<?php test('making an api request', function () { $response = $this->postJson('/api/user', ['name' => 'Sally']); $response ->assertStatus(201) ->assertJson([ 'created' => true, ]);});
<?php namespace Tests\Feature; use Tests\TestCase; class ExampleTest extends TestCase{ /** * A basic functional test example. */ public function test_making_an_api_request(): void { $response = $this->postJson('/api/user', ['name' => 'Sally']); $response ->assertStatus(201) ->assertJson([ 'created' => true, ]); }}
علاوه بر این، دادههای پاسخ JSON ممکن است بهعنوان متغیرهای آرایه در پاسخ قابل دسترسی باشند، که بررسی مقادیر جداگانهای که در یک پاسخ JSON برگردانده شده است را برای شما راحت میکند:
expect($response['created'])->toBeTrue();
$this->assertTrue($response['created']);
این
assertJson
روش پاسخ را به یک آرایه تبدیل میکند وPHPUnit::assertArraySubset
برای تأیید وجود آرایه دادهشده در پاسخ JSON که توسط برنامه برگردانده شده است، استفاده میکند. بنابراین، اگر ویژگی های دیگری در پاسخ JSON وجود داشته باشد، تا زمانی که قطعه داده شده وجود داشته باشد، این آزمایش همچنان با موفقیت انجام می شود.
ادعای تطابق دقیق JSON
همانطور که قبلا ذکر شد، این
assertJson
روش ممکن است برای اثبات وجود قطعه ای از JSON در پاسخ JSON استفاده شود. اگر می خواهید تأیید کنید که آرایه داده شده
دقیقاً
با JSON بازگشتی برنامه شما مطابقت دارد، باید از
assertExactJson
روش زیر استفاده کنید:
<?php test('asserting an exact json match', function () { $response = $this->postJson('/user', ['name' => 'Sally']); $response ->assertStatus(201) ->assertExactJson([ 'created' => true, ]);});
<?php namespace Tests\Feature; use Tests\TestCase; class ExampleTest extends TestCase{ /** * A basic functional test example. */ public function test_asserting_an_exact_json_match(): void { $response = $this->postJson('/user', ['name' => 'Sally']); $response ->assertStatus(201) ->assertExactJson([ 'created' => true, ]); }}
ادعا در مسیرهای JSON
اگر می خواهید تأیید کنید که پاسخ JSON حاوی داده های داده شده در یک مسیر مشخص است، باید از
assertJsonPath
روش استفاده کنید:
<?php test('asserting a json path value', function () { $response = $this->postJson('/user', ['name' => 'Sally']); $response ->assertStatus(201) ->assertJsonPath('team.owner.name', 'Darian');});
<?php namespace Tests\Feature; use Tests\TestCase; class ExampleTest extends TestCase{ /** * A basic functional test example. */ public function test_asserting_a_json_paths_value(): void { $response = $this->postJson('/user', ['name' => 'Sally']); $response ->assertStatus(201) ->assertJsonPath('team.owner.name', 'Darian'); }}
این
assertJsonPath
روش همچنین یک بسته را میپذیرد، که ممکن است برای تعیین پویا استفاده شود که آیا ادعا باید تصویب شود یا خیر:
$response->assertJsonPath('team.owner.name', fn (string $name) => strlen($name) >= 3);
تست JSON روان
لاراول همچنین روشی زیبا برای آزمایش روان پاسخ های JSON برنامه شما ارائه می دهد. برای شروع، یک بسته به
assertJson
روش ارسال کنید. این بسته شدن با نمونهای احضار میشود
Illuminate\Testing\Fluent\AssertableJson
که میتوان از آن برای اظهارنظر علیه JSON که توسط برنامه شما برگردانده شده است استفاده کرد. این
where
روش ممکن است برای اظهار نظر علیه یک ویژگی خاص از JSON استفاده شود، در حالی که
missing
روش ممکن است برای ادعای عدم وجود یک ویژگی خاص در JSON استفاده شود:
use Illuminate\Testing\Fluent\AssertableJson; test('fluent json', function () { $response = $this->getJson('/users/1'); $response ->assertJson(fn (AssertableJson $json) => $json->where('id', 1) ->where('name', 'Victoria Faith') ->where('email', fn (string $email) => str($email)->is('victoria@gmail.com')) ->whereNot('status', 'pending') ->missing('password') ->etc() );});
use Illuminate\Testing\Fluent\AssertableJson; /** * A basic functional test example. */public function test_fluent_json(): void{ $response = $this->getJson('/users/1'); $response ->assertJson(fn (AssertableJson $json) => $json->where('id', 1) ->where('name', 'Victoria Faith') ->where('email', fn (string $email) => str($email)->is('victoria@gmail.com')) ->whereNot('status', 'pending') ->missing('password') ->etc() );}
درک
etc
روش
در مثال بالا، ممکن است متوجه شده باشید که ما
etc
روش را در انتهای زنجیره ادعای خود فراخوانی کردیم. این روش به لاراول اطلاع می دهد که ممکن است ویژگی های دیگری در شی JSON وجود داشته باشد. اگر از
etc
روش استفاده نشود، در صورتی که سایر ویژگیهایی که در مورد آنها ادعا نکردهاید در شی JSON وجود داشته باشند، آزمایش با شکست مواجه میشود.
هدف پشت این رفتار این است که از شما در برابر افشای ناخواسته اطلاعات حساس در پاسخهای JSON با مجبور کردن شما به صراحتاً ادعایی علیه ویژگی یا اجازه دادن صریح ویژگیهای اضافی از طریق روش محافظت کند
etc
.
با این حال، باید توجه داشته باشید که شامل نکردن
etc
متد در زنجیره ادعای شما تضمین نمیکند که ویژگیهای اضافی به آرایههایی که درون شی JSON شما تودرتو هستند اضافه نمیشوند. این
etc
روش تنها تضمین میکند که هیچ ویژگی اضافی در سطح تودرتویی که
etc
متد در آن فراخوانی میشود وجود نداشته باشد.
اظهار وجود صفت / عدم وجود
برای اثبات وجود یا عدم وجود یک ویژگی، می توانید از روش
has
و استفاده کنید
missing
:
$response->assertJson(fn (AssertableJson $json) => $json->has('data') ->missing('message'));
علاوه بر این،
hasAll
و
missingAll
متدها امکان اثبات وجود یا عدم وجود چندین ویژگی به طور همزمان را میدهند:
$response->assertJson(fn (AssertableJson $json) => $json->hasAll(['status', 'data']) ->missingAll(['message', 'code']));
می توانید از این
hasAny
روش برای تعیین اینکه آیا حداقل یکی از لیست مشخصی از ویژگی ها وجود دارد یا خیر استفاده کنید:
$response->assertJson(fn (AssertableJson $json) => $json->has('status') ->hasAny('data', 'message', 'code'));
ادعا در مقابل مجموعه های JSON
اغلب، مسیر شما یک پاسخ JSON که حاوی چندین مورد است، مانند چندین کاربر، برمیگرداند:
Route::get('/users', function () { return User::all();});
در این شرایط، ممکن است از روش شیء روان JSON
has
برای اظهارنظر علیه کاربران موجود در پاسخ استفاده کنیم. به عنوان مثال، اجازه دهید ادعا کنیم که پاسخ JSON شامل سه کاربر است. در مرحله بعد، با استفاده از این روش، در مورد اولین کاربر در مجموعه اظهاراتی خواهیم داشت
first
. این
first
روش یک بسته را میپذیرد که رشته JSON قابل ادعا دیگری را دریافت میکند که میتوانیم از آن برای اظهارنظر درباره اولین شی در مجموعه JSON استفاده کنیم:
$response ->assertJson(fn (AssertableJson $json) => $json->has(3) ->first(fn (AssertableJson $json) => $json->where('id', 1) ->where('name', 'Victoria Faith') ->where('email', fn (string $email) => str($email)->is('victoria@gmail.com')) ->missing('password') ->etc() ) );
محدوده ادعاهای مجموعه JSON
گاهی اوقات، مسیرهای برنامه شما مجموعههای JSON را برمیگرداند که کلیدهای نامگذاری شده به آنها اختصاص داده شده است:
Route::get('/users', function () { return [ 'meta' => [...], 'users' => User::all(), ];})
هنگام آزمایش این مسیرها، میتوانید از
has
روشی برای تأیید تعداد موارد موجود در مجموعه استفاده کنید. علاوه بر این، می توانید از این
has
روش برای ارائه زنجیره ای از ادعاها استفاده کنید:
$response ->assertJson(fn (AssertableJson $json) => $json->has('meta') ->has('users', 3) ->has('users.0', fn (AssertableJson $json) => $json->where('id', 1) ->where('name', 'Victoria Faith') ->where('email', fn (string $email) => str($email)->is('victoria@gmail.com')) ->missing('password') ->etc() ) );
با این حال، به جای برقراری دو فراخوان جداگانه با
has
متد برای ادعای
users
مجموعه، میتوانید یک فراخوانی تکی برقرار کنید که یک بسته را به عنوان پارامتر سوم آن ارائه میکند. هنگام انجام این کار، بسته شدن به طور خودکار فراخوانی می شود و به اولین مورد در مجموعه اختصاص می یابد:
$response ->assertJson(fn (AssertableJson $json) => $json->has('meta') ->has('users', 3, fn (AssertableJson $json) => $json->where('id', 1) ->where('name', 'Victoria Faith') ->where('email', fn (string $email) => str($email)->is('victoria@gmail.com')) ->missing('password') ->etc() ) );
اثبات انواع JSON
ممکن است فقط بخواهید ادعا کنید که خصوصیات در پاسخ JSON از نوع خاصی هستند. کلاس روش ها
و
روش هایی را برای انجام این کار
Illuminate\Testing\Fluent\AssertableJson
ارائه می دهد :
whereType
whereAllType
$response->assertJson(fn (AssertableJson $json) => $json->whereType('id', 'integer') ->whereAllType([ 'users.0.name' => 'string', 'meta' => 'array' ]));
می توانید چندین نوع را با استفاده از
|
کاراکتر مشخص کنید، یا آرایه ای از انواع را به عنوان پارامتر دوم به
whereType
متد ارسال کنید. اگر مقدار پاسخ هر یک از انواع فهرست شده باشد، ادعا موفقیت آمیز خواهد بود:
$response->assertJson(fn (AssertableJson $json) => $json->whereType('name', 'string|null') ->whereType('id', ['string', 'integer']));
متدهای
whereType
و
whereAllType
انواع زیر را تشخیص می دهند:
string
,
integer
,
double
,
boolean
,
array
و
null
.
تست آپلود فایل
کلاس روشی را
Illuminate\Http\UploadedFile
ارائه می دهد
fake
که ممکن است برای تولید فایل های ساختگی یا تصاویر برای آزمایش استفاده شود. این، همراه با روش
Storage
نما
fake
، آزمایش بارگذاری فایل را بسیار ساده می کند. برای مثال، میتوانید این دو ویژگی را برای آزمایش آسان فرم آپلود آواتار ترکیب کنید:
<?php use Illuminate\Http\UploadedFile;use Illuminate\Support\Facades\Storage; test('avatars can be uploaded', function () { Storage::fake('avatars'); $file = UploadedFile::fake()->image('avatar.jpg'); $response = $this->post('/avatar', [ 'avatar' => $file, ]); Storage::disk('avatars')->assertExists($file->hashName());});
<?php namespace Tests\Feature; use Illuminate\Http\UploadedFile;use Illuminate\Support\Facades\Storage;use Tests\TestCase; class ExampleTest extends TestCase{ public function test_avatars_can_be_uploaded(): void { Storage::fake('avatars'); $file = UploadedFile::fake()->image('avatar.jpg'); $response = $this->post('/avatar', [ 'avatar' => $file, ]); Storage::disk('avatars')->assertExists($file->hashName()); }}
اگر می خواهید ادعا کنید که یک فایل مشخص وجود ندارد، می توانید از
assertMissing
روش ارائه شده توسط
Storage
نما استفاده کنید:
Storage::fake('avatars'); // ... Storage::disk('avatars')->assertMissing('missing.jpg');
سفارشی سازی فایل جعلی
هنگام ایجاد فایل ها با استفاده از
fake
روش ارائه شده توسط
UploadedFile
کلاس، می توانید عرض، ارتفاع و اندازه تصویر (بر حسب کیلوبایت) را مشخص کنید تا قوانین اعتبارسنجی برنامه خود را بهتر آزمایش کنید:
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');
نماهای آزمایشی
لاراول همچنین به شما این امکان را می دهد که بدون درخواست HTTP شبیه سازی شده به برنامه، یک View ارائه دهید. برای انجام این کار، می توانید
view
روش موجود در آزمون خود را فراخوانی کنید. این
view
روش نام view و آرایه اختیاری داده را می پذیرد. این روش یک نمونه از را برمیگرداند
Illuminate\Testing\TestView
که چندین روش را برای اظهارنظر راحت در مورد محتوای view ارائه میکند:
<?php test('a welcome view can be rendered', function () { $view = $this->view('welcome', ['name' => 'Taylor']); $view->assertSee('Taylor');});
<?php namespace Tests\Feature; use Tests\TestCase; class ExampleTest extends TestCase{ public function test_a_welcome_view_can_be_rendered(): void { $view = $this->view('welcome', ['name' => 'Taylor']); $view->assertSee('Taylor'); }}
کلاس
TestView
متدهای ادعایی زیر را ارائه می دهد:
assertSee
,
assertSeeInOrder
,
assertSeeText
,
assertSeeTextInOrder
,
assertDontSee
و
assertDontSeeText
.
در صورت نیاز، میتوانید محتوای نمایش خام و رندر شده را با فرستادن
TestView
نمونه به یک رشته دریافت کنید:
$contents = (string) $this->view('welcome');
خطاهای اشتراک گذاری
برخی از نماها ممکن است به خطاهای به اشتراک گذاشته شده در
کیسه خطای جهانی ارائه شده توسط لاراول
بستگی داشته باشند . برای هیدراته کردن کیسه خطا با پیام های خطا، می توانید از
withViewErrors
روش زیر استفاده کنید:
$view = $this->withViewErrors([ 'name' => ['Please provide a valid name.']])->view('form'); $view->assertSee('Please provide a valid name.');
رندر تیغه و اجزاء
در صورت لزوم، میتوانید از این
blade
روش برای ارزیابی و ارائه یک رشته
Blade
خام استفاده کنید . مانند
view
متد،
blade
متد نمونه ای از
Illuminate\Testing\TestView
:
$view = $this->blade( '<x-component :name="$name" />', ['name' => 'Taylor']); $view->assertSee('Taylor');
شما می توانید از این
component
روش برای ارزیابی و ارائه یک
جزء Blade
استفاده کنید . متد
component
نمونه ای از
Illuminate\Testing\TestComponent
:
$view = $this->component(Profile::class, ['name' => 'Taylor']); $view->assertSee('Taylor');
ادعاهای موجود
اظهارات پاسخ
کلاس لاراول
Illuminate\Testing\TestResponse
انواع مختلفی از روشهای ادعای سفارشی را ارائه میکند که میتوانید هنگام آزمایش برنامه خود از آنها استفاده کنید. این ادعاها ممکن است در پاسخی که با روش های آزمایشی
json
،
get
,
post
,
put
, و برگردانده می شود قابل دسترسی باشد
delete
:
ادعا پذیرفته شد assertBadRequest ادعای تضاد عنوان کوکی assertCookie Expired assertCookieNotExpired اظهار کوکی گم شده است ادعا ایجاد شد ادعا کنید ببینید assertDontSeeText assertدانلود ادعای ExactJson ادعا ممنوع ادعا پیدا شد ادعا می کند assertHeader assertHeader Missing assertInternalServerError ادعای جیسون ادعای JsonCount assertJsonFragment assertJsonIsArray assertJsonIsObject ادعای Json گم شده است assertJsonMissingExact assertJsonMissingValidationErrors assertJsonPath assertJsonMissingPath assertJsonStructure assertJsonValidationErrors assertJsonValidationErrorFor تعیین مکان assertMethodNotAllowed assertMovedPermanently ادعای محتوا اظهار بدون محتوا assertStreamedContent assertNotFound اظهارت Ok assertPaymentRequired assertPlainCookie assertRedirect assertRedirectContains assertRedirectToRoute assertRedirectToSignedRoute assertRequestTimeout ادعا ببینید assertSeeInOrder assertSeeText assertSeeTextInOrder assertServerError assertService Unavailable assertSessionHas assertSessionHasInput assertSessionHasAll assertSessionHasErrors assertSessionHasErrorsIn assertSessionHasNoErrors assertSessionDoesntHaveErrors assertSession Missing اظهار وضعیت ادعای موفقیت آمیز assertTooManyRequests ادعای غیر مجاز ادعا غیر قابل پردازش assertUnsupportedMediaType assertValid assertInvalid assertViewHas assertViewHasAll assertViewIs assertView Missing
assertBadRequest
ادعا کنید که پاسخ دارای یک درخواست بد (400) کد وضعیت HTTP است:
$response->assertBadRequest();
ادعا پذیرفته شد
ادعا کنید که پاسخ دارای کد وضعیت HTTP (202) پذیرفته شده است:
$response->assertAccepted();
ادعای تضاد
ادعا کنید که پاسخ دارای کد وضعیت HTTP تضاد (409) است:
$response->assertConflict();
عنوان کوکی
ادعا کنید که پاسخ حاوی کوکی داده شده است:
$response->assertCookie($cookieName, $value = null);
assertCookie Expired
ادعا کنید که پاسخ حاوی کوکی داده شده است و منقضی شده است:
$response->assertCookieExpired($cookieName);
assertCookieNotExpired
ادعا کنید که پاسخ حاوی کوکی داده شده است و منقضی نشده است:
$response->assertCookieNotExpired($cookieName);
اظهار کوکی گم شده است
ادعا کنید که پاسخ حاوی کوکی داده شده نیست:
$response->assertCookieMissing($cookieName);
ادعا ایجاد شد
ادعا کنید که پاسخ دارای کد وضعیت HTTP 201 است:
$response->assertCreated();
ادعا کنید ببینید
ادعا کنید که رشته داده شده در پاسخی که توسط برنامه برگردانده شده است وجود ندارد. این ادعا به طور خودکار از رشته داده شده فرار می کند مگر اینکه آرگومان دومی را ارسال کنید
false
:
$response->assertDontSee($value, $escaped = true);
assertDontSeeText
ادعا کنید که رشته داده شده در متن پاسخ موجود نیست. این ادعا به طور خودکار از رشته داده شده فرار می کند مگر اینکه آرگومان دومی را ارسال کنید
false
. این متد
strip_tags
قبل از اظهار نظر،
محتوای پاسخ را به تابع PHP ارسال می کند :
$response->assertDontSeeText($value, $escaped = true);
assertدانلود
ادعا کنید که پاسخ یک "دانلود" است. به طور معمول، این بدان معنی است که مسیر فراخوانی شده که پاسخ را برمی گرداند
Response::download
، یک پاسخ
BinaryFileResponse
، یا
Storage::download
پاسخ برمی گرداند:
$response->assertDownload();
در صورت تمایل، می توانید ادعا کنید که فایل دانلودی یک نام فایل مشخص شده است:
$response->assertDownload('image.jpg');
ادعای ExactJson
ادعا کنید که پاسخ حاوی تطابق دقیق با دادههای JSON است:
$response->assertExactJson(array $data);
ادعا ممنوع
ادعا کنید که پاسخ دارای کد وضعیت HTTP ممنوعه (403) است:
$response->assertForbidden();
ادعا پیدا شد
ادعا کنید که پاسخ دارای کد وضعیت HTTP (302) یافت شده است:
$response->assertFound();
ادعا می کند
ادعا کنید که پاسخ دارای کد وضعیت HTTP (410) رفته است:
$response->assertGone();
assertHeader
ادعا کنید که هدر و مقدار داده شده در پاسخ موجود است:
$response->assertHeader($headerName, $value = null);
assertHeader Missing
ادعا کنید که هدر داده شده در پاسخ وجود ندارد:
$response->assertHeaderMissing($headerName);
assertInternalServerError
ادعا کنید که پاسخ دارای کد وضعیت HTTP "خطای سرور داخلی" (500) است:
$response->assertInternalServerError();
ادعای جیسون
ادعا کنید که پاسخ حاوی دادههای JSON است:
$response->assertJson(array $data, $strict = false);
این
assertJson
روش پاسخ را به یک آرایه تبدیل میکند و
PHPUnit::assertArraySubset
برای تأیید وجود آرایه دادهشده در پاسخ JSON که توسط برنامه برگردانده شده است، استفاده میکند. بنابراین، اگر ویژگی های دیگری در پاسخ JSON وجود داشته باشد، تا زمانی که قطعه داده شده وجود داشته باشد، این آزمایش همچنان با موفقیت انجام می شود.
ادعای JsonCount
ادعا کنید که پاسخ JSON دارای یک آرایه با تعداد مورد انتظار در کلید داده شده است:
$response->assertJsonCount($count, $key = null);
assertJsonFragment
ادعا کنید که پاسخ حاوی داده های JSON داده شده در هر نقطه از پاسخ است:
Route::get('/users', function () { return [ 'users' => [ [ 'name' => 'Taylor Otwell', ], ], ];}); $response->assertJsonFragment(['name' => 'Taylor Otwell']);
assertJsonIsArray
ادعا کنید که پاسخ JSON یک آرایه است:
$response->assertJsonIsArray();
assertJsonIsObject
ادعا کنید که پاسخ JSON یک شی است:
$response->assertJsonIsObject();
ادعای Json گم شده است
ادعا کنید که پاسخ حاوی دادههای JSON نیست:
$response->assertJsonMissing(array $data);
assertJsonMissingExact
ادعا کنید که پاسخ حاوی دادههای JSON دقیق نیست:
$response->assertJsonMissingExact(array $data);
assertJsonMissingValidationErrors
ادعا کنید که پاسخ هیچ خطای اعتبارسنجی JSON برای کلیدهای داده شده ندارد:
$response->assertJsonMissingValidationErrors($keys);
روش عمومی تر assertValid ممکن است برای ادعای اینکه یک پاسخ دارای خطاهای اعتبارسنجی است که به عنوان JSON برگردانده شده است و هیچ خطایی به ذخیره سازی جلسه فلش نشده است استفاده شود.
assertJsonPath
ادعا کنید که پاسخ حاوی داده های داده شده در مسیر مشخص شده است:
$response->assertJsonPath($path, $expectedValue);
به عنوان مثال، اگر پاسخ JSON زیر توسط برنامه شما برگردانده شود:
{ "user": { "name": "Steve Schoger" }}
شما می توانید ادعا کنید که
name
ویژگی شی
user
با یک مقدار داده شده مطابقت دارد مانند:
$response->assertJsonPath('user.name', 'Steve Schoger');
assertJsonMissingPath
ادعا کنید که پاسخ شامل مسیر داده شده نیست:
$response->assertJsonMissingPath($path);
به عنوان مثال، اگر پاسخ JSON زیر توسط برنامه شما برگردانده شود:
{ "user": { "name": "Steve Schoger" }}
email
شما می توانید ادعا کنید که شامل ویژگی شی
نیست
user
:
$response->assertJsonMissingPath('user.email');
assertJsonStructure
ادعا کنید که پاسخ دارای ساختار JSON داده شده است:
$response->assertJsonStructure(array $structure);
به عنوان مثال، اگر پاسخ JSON ارسال شده توسط برنامه شما حاوی داده های زیر باشد:
{ "user": { "name": "Steve Schoger" }}
ممکن است ادعا کنید که ساختار JSON با انتظارات شما مطابقت دارد:
$response->assertJsonStructure([ 'user' => [ 'name', ]]);
گاهی اوقات، پاسخهای JSON که توسط برنامه شما برگردانده میشوند ممکن است حاوی آرایههایی از اشیاء باشند:
{ "user": [ { "name": "Steve Schoger", "age": 55, "location": "Earth" }, { "name": "Mary Schoger", "age": 60, "location": "Earth" } ]}
در این شرایط، میتوانید از
*
کاراکتر برای ادعا در برابر ساختار تمام اشیاء موجود در آرایه استفاده کنید:
$response->assertJsonStructure([ 'user' => [ '*' => [ 'name', 'age', 'location' ] ]]);
assertJsonValidationErrors
ادعا کنید که پاسخ دارای خطاهای اعتبارسنجی JSON برای کلیدهای داده شده است. این روش باید هنگام ادعا در مقابل پاسخهایی که خطاهای اعتبارسنجی بهجای فلش شدن به جلسه به عنوان ساختار JSON برگردانده میشوند، استفاده شود:
$response->assertJsonValidationErrors(array $data, $responseKey = 'errors');
روش عمومی تر assertInvalid ممکن است برای ادعای اینکه یک پاسخ دارای خطاهای اعتبارسنجی است که به صورت JSON برگردانده شده است یا اینکه خطاها به ذخیره سازی جلسه فلش شده است استفاده شود.
assertJsonValidationErrorFor
ادعا کنید پاسخ دارای هر گونه خطای اعتبارسنجی JSON برای کلید داده شده است:
$response->assertJsonValidationErrorFor(string $key, $responseKey = 'errors');
assertMethodNotAllowed
ادعا کنید که پاسخ دارای روش غیر مجاز است (405) کد وضعیت HTTP:
$response->assertMethodNotAllowed();
assertMovedPermanently
ادعا کنید که پاسخ دارای کد وضعیت HTTP برای همیشه (301) است:
$response->assertMovedPermanently();
تعیین مکان
ادعا کنید که پاسخ دارای مقدار URI داده شده در
Location
هدر است:
$response->assertLocation($uri);
ادعای محتوا
ادعا کنید که رشته داده شده با محتوای پاسخ مطابقت دارد:
$response->assertContent($value);
اظهار بدون محتوا
ادعا کنید که پاسخ دارای کد وضعیت HTTP داده شده است و محتوایی ندارد:
$response->assertNoContent($status = 204);
assertStreamedContent
ادعا کنید که رشته داده شده با محتوای پاسخ جریانی مطابقت دارد:
$response->assertStreamedContent($value);
assertNotFound
ادعا کنید که پاسخ دارای کد وضعیت HTTP (404) یافت نشد:
$response->assertNotFound();
اظهارت Ok
ادعا کنید که پاسخ دارای کد وضعیت 200 HTTP است:
$response->assertOk();
assertPaymentRequired
ادعا کنید که پاسخ دارای کد وضعیت HTTP (402) برای پرداخت است:
$response->assertPaymentRequired();
assertPlainCookie
ادعا کنید که پاسخ حاوی کوکی رمزگذاری نشده داده شده است:
$response->assertPlainCookie($cookieName, $value = null);
assertRedirect
ادعا کنید که پاسخ یک تغییر مسیر به URI داده شده است:
$response->assertRedirect($uri = null);
assertRedirectContains
ثابت کنید که آیا پاسخ به یک URI که شامل رشته داده شده است هدایت می شود یا خیر:
$response->assertRedirectContains($string);
assertRedirectToRoute
ادعا کنید که پاسخ یک تغییر مسیر به مسیر نامگذاری شده است :
$response->assertRedirectToRoute($name, $parameters = []);
assertRedirectToSignedRoute
ادعا کنید که پاسخ یک تغییر مسیر به مسیر امضا شده داده شده است :
$response->assertRedirectToSignedRoute($name = null, $parameters = []);
assertRequestTimeout
ادعا کنید که پاسخ دارای مهلت زمانی درخواست (408) کد وضعیت HTTP است:
$response->assertRequestTimeout();
ادعا ببینید
ادعا کنید که رشته داده شده در پاسخ موجود است. این ادعا به طور خودکار از رشته داده شده فرار می کند مگر اینکه آرگومان دومی را ارسال کنید
false
:
$response->assertSee($value, $escaped = true);
assertSeeInOrder
ادعا کنید که رشته های داده شده به ترتیب در پاسخ قرار دارند. این ادعا به طور خودکار از رشته های داده شده فرار می کند مگر اینکه آرگومان دومی را ارسال کنید
false
:
$response->assertSeeInOrder(array $values, $escaped = true);
assertSeeText
ادعا کنید که رشته داده شده در متن پاسخ موجود است. این ادعا به طور خودکار از رشته داده شده فرار می کند مگر اینکه آرگومان دومی را ارسال کنید
false
. محتوای پاسخ
strip_tags
قبل از انجام ادعا به تابع PHP ارسال می شود:
$response->assertSeeText($value, $escaped = true);
assertSeeTextInOrder
ادعا کنید که رشته های داده شده به ترتیب در متن پاسخ قرار دارند. این ادعا به طور خودکار از رشته های داده شده فرار می کند مگر اینکه آرگومان دومی را ارسال کنید
false
. محتوای پاسخ
strip_tags
قبل از انجام ادعا به تابع PHP ارسال می شود:
$response->assertSeeTextInOrder(array $values, $escaped = true);
assertServerError
ادعا کنید که پاسخ دارای یک خطای سرور است (>= 500 , < 600) کد وضعیت HTTP:
$response->assertServerError();
assertService Unavailable
ادعا کنید که پاسخ دارای کد وضعیت HTTP "سرویس در دسترس نیست" (503):
$response->assertServiceUnavailable();
assertSessionHas
ادعا کنید که جلسه شامل قطعه داده شده است:
$response->assertSessionHas($key, $value = null);
در صورت نیاز، بسته شدن را می توان به عنوان آرگومان دوم روش ارائه کرد
assertSessionHas
. اگر بسته شدن بازگردد، این ادعا تصویب خواهد شد
true
:
$response->assertSessionHas($key, function (User $value) { return $value->name === 'Taylor Otwell';});
assertSessionHasInput
ادعا کنید که جلسه دارای مقدار مشخصی در آرایه ورودی فلش شده است :
$response->assertSessionHasInput($key, $value = null);
در صورت نیاز، بسته شدن را می توان به عنوان آرگومان دوم روش ارائه کرد
assertSessionHasInput
. اگر بسته شدن بازگردد، این ادعا تصویب خواهد شد
true
:
use Illuminate\Support\Facades\Crypt; $response->assertSessionHasInput($key, function (string $value) { return Crypt::decryptString($value) === 'secret';});
assertSessionHasAll
ادعا کنید که جلسه شامل یک آرایه معین از جفت کلید / مقدار است:
$response->assertSessionHasAll(array $data);
به عنوان مثال، اگر جلسه برنامه شما حاوی کلیدها
name
و
status
کلیدها باشد، می توانید ادعا کنید که هر دو وجود دارند و مقادیر مشخص شده را دارند مانند:
$response->assertSessionHasAll([ 'name' => 'Taylor Otwell', 'status' => 'active',]);
assertSessionHasErrors
ادعا کنید که جلسه حاوی خطای داده شده است
$keys
. اگر
$keys
یک آرایه انجمنی است، ادعا کنید که جلسه حاوی یک پیام خطای خاص (مقدار) برای هر فیلد (کلید) است. این روش باید هنگام آزمایش مسیرهایی که خطاهای اعتبارسنجی را به جلسه فلش می کنند به جای بازگرداندن آنها به عنوان ساختار JSON استفاده شود:
$response->assertSessionHasErrors( array $keys = [], $format = null, $errorBag = 'default');
به عنوان مثال، برای ادعای اینکه فیلدهای
name
و
email
دارای پیامهای خطای اعتبارسنجی هستند که به جلسه فلش شدهاند، میتوانید از
assertSessionHasErrors
روشی مانند زیر استفاده کنید:
$response->assertSessionHasErrors(['name', 'email']);
یا، ممکن است ادعا کنید که یک فیلد مشخص دارای یک پیام خطای اعتبارسنجی خاص است:
$response->assertSessionHasErrors([ 'name' => 'The given name was invalid.']);
روش عمومی تر assertInvalid ممکن است برای ادعای اینکه یک پاسخ دارای خطاهای اعتبارسنجی است که به صورت JSON برگردانده شده است یا اینکه خطاها به ذخیره سازی جلسه فلش شده است استفاده شود.
assertSessionHasErrorsIn
ادعا کنید که جلسه حاوی خطای داده شده
$keys
در یک
کیسه خطای
خاص است . اگر
$keys
یک آرایه انجمنی است، ادعا کنید که جلسه حاوی یک پیام خطای خاص (مقدار) برای هر فیلد (کلید)، در کیسه خطا است:
$response->assertSessionHasErrorsIn($errorBag, $keys = [], $format = null);
assertSessionHasNoErrors
ادعا کنید که جلسه هیچ خطای اعتبارسنجی ندارد:
$response->assertSessionHasNoErrors();
assertSessionDoesntHaveErrors
ادعا کنید که جلسه هیچ خطای اعتبارسنجی برای کلیدهای داده شده ندارد:
$response->assertSessionDoesntHaveErrors($keys = [], $format = null, $errorBag = 'default');
روش عمومی تر assertValid ممکن است برای ادعای اینکه یک پاسخ دارای خطاهای اعتبارسنجی است که به عنوان JSON برگردانده شده است و هیچ خطایی به ذخیره سازی جلسه فلش نشده است استفاده شود.
assertSession Missing
ادعا کنید که جلسه شامل کلید داده شده نیست:
$response->assertSessionMissing($key);
اظهار وضعیت
ادعا کنید که پاسخ دارای کد وضعیت HTTP داده شده است:
$response->assertStatus($code);
ادعای موفقیت آمیز
ادعا کنید که پاسخ دارای کد وضعیت HTTP موفق (>= 200 و < 300) است:
$response->assertSuccessful();
assertTooManyRequests
ادعا کنید که پاسخ دارای درخواست های بسیار زیادی است (429) کد وضعیت HTTP:
$response->assertTooManyRequests();
ادعای غیر مجاز
ادعا کنید که پاسخ دارای کد وضعیت HTTP (401) غیرمجاز است:
$response->assertUnauthorized();
ادعا غیر قابل پردازش
ادعا کنید که پاسخ دارای یک موجودیت غیرقابل پردازش (422) کد وضعیت HTTP است:
$response->assertUnprocessable();
assertUnsupportedMediaType
ادعا کنید که پاسخ دارای کد وضعیت HTTP نوع رسانه پشتیبانی نشده (415) است:
$response->assertUnsupportedMediaType();
assertValid
ادعا کنید که پاسخ هیچ خطای اعتبارسنجی برای کلیدهای داده شده ندارد. این روش ممکن است برای اظهار نظر در برابر پاسخهایی استفاده شود که در آن خطاهای اعتبارسنجی به عنوان ساختار JSON برگردانده میشوند یا در جایی که خطاهای اعتبارسنجی به جلسه فلش شدهاند:
// Assert that no validation errors are present...$response->assertValid(); // Assert that the given keys do not have validation errors...$response->assertValid(['name', 'email']);
assertInvalid
ادعا کنید که پاسخ دارای خطاهای اعتبارسنجی برای کلیدهای داده شده است. این روش ممکن است برای اظهار نظر در برابر پاسخهایی استفاده شود که در آن خطاهای اعتبارسنجی به عنوان ساختار JSON برگردانده میشوند یا در جایی که خطاهای اعتبارسنجی به جلسه فلش شدهاند:
$response->assertInvalid(['name', 'email']);
همچنین می توانید ادعا کنید که یک کلید داده شده دارای یک پیام خطای اعتبارسنجی خاص است. هنگام انجام این کار، می توانید کل پیام یا فقط بخش کوچکی از پیام را ارائه دهید:
$response->assertInvalid([ 'name' => 'The name field is required.', 'email' => 'valid email address',]);
assertViewHas
ادعا کنید که نمای پاسخ شامل یک قطعه داده شده است:
$response->assertViewHas($key, $value = null);
ارسال یک بسته به عنوان آرگومان دوم به
assertViewHas
روش به شما این امکان را میدهد که یک داده خاص را بررسی کرده و ادعا کنید:
$response->assertViewHas('user', function (User $user) { return $user->name === 'Taylor';});
علاوه بر این، دادههای مشاهده ممکن است بهعنوان متغیرهای آرایه در پاسخ قابل دسترسی باشند، که به شما امکان میدهد به راحتی آن را بررسی کنید:
expect($response['name'])->toBe('Taylor');
$this->assertEquals('Taylor', $response['name']);
assertViewHasAll
ادعا کنید که نمای پاسخ دارای یک لیست داده شده است:
$response->assertViewHasAll(array $data);
این روش ممکن است برای ادعای اینکه نمای به سادگی حاوی داده هایی است که با کلیدهای داده شده مطابقت دارند استفاده شود:
$response->assertViewHasAll([ 'name', 'email',]);
یا میتوانید ادعا کنید که دادههای view وجود دارند و مقادیر خاصی دارند:
$response->assertViewHasAll([ 'name' => 'Taylor Otwell', 'email' => 'taylor@example.com,',]);
assertViewIs
ادعا کنید که نمای داده شده توسط مسیر برگردانده شده است:
$response->assertViewIs($value);
assertView Missing
ادعا کنید که کلید داده داده شده برای نمای بازگردانده شده در پاسخ برنامه در دسترس قرار نگرفته است:
$response->assertViewMissing($key);
اظهارات احراز هویت
لاراول همچنین انواع مختلفی از ادعاهای مربوط به احراز هویت را ارائه می دهد که می توانید در تست ویژگی های برنامه خود از آنها استفاده کنید. توجه داشته باشید که این متدها در خود کلاس تست فراخوانی می شوند و نه
Illuminate\Testing\TestResponse
نمونه ای که توسط متدهایی مانند
get
و برگردانده می شود
post
.
عنوان تایید شده است
ادعا کنید که یک کاربر احراز هویت شده است:
$this->assertAuthenticated($guard = null);
مدعی مهمان
ادعا کنید که یک کاربر احراز هویت نشده است:
$this->assertGuest($guard = null);
assertAuthenticatedAs
ادعا کنید که یک کاربر خاص احراز هویت شده است:
$this->assertAuthenticatedAs($user, $guard = null);
ادعاهای اعتبارسنجی
لاراول دو ادعای اولیه مرتبط با اعتبار سنجی ارائه می دهد که می توانید از آنها برای اطمینان از معتبر بودن یا نامعتبر بودن داده های ارائه شده در درخواست خود استفاده کنید.
assertValid
ادعا کنید که پاسخ هیچ خطای اعتبارسنجی برای کلیدهای داده شده ندارد. این روش ممکن است برای اظهار نظر در برابر پاسخهایی استفاده شود که در آن خطاهای اعتبارسنجی به عنوان ساختار JSON برگردانده میشوند یا در جایی که خطاهای اعتبارسنجی به جلسه فلش شدهاند:
// Assert that no validation errors are present...$response->assertValid(); // Assert that the given keys do not have validation errors...$response->assertValid(['name', 'email']);
assertInvalid
ادعا کنید که پاسخ دارای خطاهای اعتبارسنجی برای کلیدهای داده شده است. این روش ممکن است برای اظهار نظر در برابر پاسخهایی استفاده شود که در آن خطاهای اعتبارسنجی به عنوان ساختار JSON برگردانده میشوند یا در جایی که خطاهای اعتبارسنجی به جلسه فلش شدهاند:
$response->assertInvalid(['name', 'email']);
همچنین می توانید ادعا کنید که یک کلید داده شده دارای یک پیام خطای اعتبارسنجی خاص است. هنگام انجام این کار، می توانید کل پیام یا فقط بخش کوچکی از پیام را ارائه دهید:
$response->assertInvalid([ 'name' => 'The name field is required.', 'email' => 'valid email address',]);