HTTPテスト
- テスト ファイルのアップロード
- 利用可能なアサーション メソッド
- 応答アサーション
- 認証アサーション
- ##
はじめに
Laravel は、HTTP リクエストの生成と出力の検査の両方に非常に流暢な API を提供します。たとえば、次のテスト ケースを確認できます。
<?php namespace Tests\Feature; use Tests\TestCase; use Illuminate\Foundation\Testing\RefreshDatabase; use Illuminate\Foundation\Testing\WithoutMiddleware; class ExampleTest extends TestCase{ /** * 一个基础的测试用例。 * * @return void */ public function testBasicTest() { $response = $this->get('/'); $response->assertStatus(200); } }
get
メソッドは、アプリケーションへのGET
リクエストを作成し、assertStatus
メソッドは、返された応答が指定された HTTP ステータス コードであることをアサートします。この単純なアサーションに加えて、Laravel には応答ヘッダー、コンテンツ、JSON、構造などをチェックするさまざまなアサーションも含まれています。カスタム リクエスト ヘッダー
アプリケーションに送信する前に
withHeaders
メソッドを使用できます。以前のカスタムリクエストのヘッダー。必要なカスタム ヘッダーを追加できます。<?php class ExampleTest extends TestCase{ /** * 一个基础的功能测试用例。 * * @return void */ public function testBasicExample() { $response = $this->withHeaders([ 'X-Header' => 'Value', ])->json('POST', '/user', ['name' => 'Sally']); $response ->assertStatus(201) ->assertJson([ 'created' => true, ]); } }
{tip} CSRF ミドルウェアは、テストの実行時に自動的に無効になります。
セッション/認証
Laravel は、HTTP テスト中に使用できるいくつかの補助機能を提供します。まず、配列を
withSession
メソッドに渡してセッション データを設定する必要があります。これにより、アプリケーションのテスト リクエストを送信する前に、セッションにデータをロードすることが簡単になります。<?php class ExampleTest extends TestCase{ public function testApplication() { $response = $this->withSession(['foo' => 'bar']) ->get('/'); } }
もちろん、セッションは通常、ユーザーの認証などのユーザー ステータスを維持するために使用されます。
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('/'); } }
また、ガード名を 2 番目の引数として
actingAs
に渡すことで、ユーザーが認証されるガードを指定することもできます。 :$this->actingAs($user, 'api')
JSON API のテスト
Laravel は、JSON API とその応答をテストするためのいくつかのヘルパー関数も提供します。たとえば、
json
、get
、post
、put
、patch
、delete
さまざまな HTTP アクションの送信に使用できます。データとリクエスト ヘッダーをこれらのメソッドに簡単に渡すこともできます。POST
リクエストを/user
に書き込み、予期したデータが返されることをアサートすることで、これらの使用を開始しましょう:<?php class ExampleTest extends TestCase{ /** * 一个简单的功能测试用例。 * * @return void */ public function testBasicExample() { $response = $this->json('POST', '/user', ['name' => 'Sally']); $response ->assertStatus(201) ->assertJson([ 'created' => true, ]); } }
{tip}
assertJson
メソッドは応答を配列に変換し、PHPUnit::assertArraySubset
を利用して、アプリケーションから返された JSON 応答に指定された配列が存在することを確認します。したがって、JSON 応答に他の属性がある場合でも、配列が存在していればテストは合格します。完全一致の検証
指定された配列 exactly がアプリケーションから返された JSON 結果と一致することを検証する場合は、
assertExactJson
メソッドを使用する必要があります。 ##<?php class ExampleTest extends TestCase{ /** * 一个基本的功能测试用例。 * * @return void */ public function testBasicExample() { $response = $this->json('POST', '/user', ['name' => 'Sally']); $response ->assertStatus(201) ->assertExactJson([ 'created' => true, ]); } }
テスト ファイルのアップロード
Illuminate\Http\UploadedFile
テスト目的で仮想ファイルまたはイメージを生成するfake
メソッドを提供します。Storage
ファサードのfake
メソッドと組み合わせると、ファイルのアップロード テストを大幅に簡素化できます。たとえば、2 つの関数を組み合わせて、アバター アップロード フォームを非常に簡単にテストできます。<?php namespace Tests\Feature; use Tests\TestCase; use Illuminate\Http\UploadedFile; use Illuminate\Support\Facades\Storage; use Illuminate\Foundation\Testing\RefreshDatabase; use Illuminate\Foundation\Testing\WithoutMiddleware; class ExampleTest extends TestCase{ public function testAvatarUpload() { Storage::fake('avatars'); $file = UploadedFile::fake()->image('avatar.jpg'); $response = $this->json('POST', '/avatar', [ 'avatar' => $file, ]); // 断言文件已经存储 . . . Storage::disk('avatars')->assertExists($file->hashName()); // 断言文件不存在 . . . Storage::disk('avatars')->assertMissing('missing.jpg'); } }
仮想ファイルの準備
使用中
fake
Whenファイルを作成するときに、画像の幅、高さ、サイズを指定して、テスト ルールをより適切に検証できます。UploadedFile::fake()->image('avatar.jpg', $width, $height)->size(100);
画像の作成に加えて、
create
メソッドを使用して次のこともできます。 create 他のタイプのファイル:UploadedFile::fake()->create('document.pdf', $sizeInKilobytes);
利用可能なアサーション
##Response Assertion
Laravel は、PHPUnit テスト用のさまざまな一般的なアサーション メソッドを提供します。これらのアサーションは、
json
、get
、post
、put
、およびdelete
のテスト メソッドからアクセスできます。指定された Cookie が応答に含まれていることをアサートします。##assertCookie
assertCookieExpired
assertCookieNotExpired
assertCookieMissing
assertDontSee
assertDontSeeText
assertExactJson
assertForbidden
assertHeader
assertHeaderMissing
assertJson
assertJsonCount
assertJsonFragment
assertJsonMissing
assertJsonMissingExact
assertJsonMissingValidationErrors
assertJsonStructure
assertJsonValidationErrors
assertLocation
assertNotFound
assertOk
assertPlainCookie#assertRedirect
assertSee
# #assertSeeInOrder
assertSeeText
assertSeeTextInOrder
assertSessionHas
assertSessionHasAll
assertSessionHasErrors
assertSessionHasErrorsIn
assertSessionHasNoErrors
assertSessionDoesntHaveErrors
assertSessionMissing
# #assertStatus
assertSuccessful
assertViewHas
assertViewHasAll
assertViewIs
assertViewMissing$response->assertCookie($cookieName, $value = null);
assertCookieExpired
指定された Cookie が応答に含まれていて、有効期限が切れていることをアサートします:
$response->assertCookieExpired($cookieName);
#assertCookieNotExpired
指定された Cookie が応答に含まれており、有効期限が切れていないことをアサートします:
$response->assertCookieNotExpired($cookieName);
#assertCookieMissing
指定された Cookie が応答に含まれていないことをアサートします:
$response->assertCookieMissing($cookieName);
##assertDontSeeAssert指定された Cookie が応答に含まれていないことを確認します。 指定された文字列:$response->assertDontSee($value);
assertDontSeeText指定された文字列が含まれていることを確認します。文字列が応答テキストに含まれていません:$response->assertDontSeeText($value);
assertExactJsonデータが応答に正確に含まれていることをアサートします指定された JSON データと一致します:$response->assertExactJson(array $data);
##assertForbidden応答に禁止されたステータス コードがあることをアサートします:
$response->assertForbidden();
assertHeader指定されたヘッダーが応答に存在することをアサートします:
$response->assertHeader($headerName, $value = null);
#assertHeaderMissing指定されたヘッダーが応答に存在しないことをアサートします:$response->assertHeaderMissing($headerName);
応答に指定された JSON データが含まれていることをアサートします:$response->assertJson(array $data);
応答 JSON に配列が含まれていることをアサートします。指定されたキーを含む要素の予想数:$response->assertJsonCount($count, $key = null);
##assertJsonFragment応答に指定された JSON フラグメントが含まれていることをアサートします:
$response->assertJsonFragment(array $data);
#assertJsonMissing応答に指定された JSON フラグメントが含まれていないことをアサートします:
$response->assertJsonMissing(array $data);
assertJsonMissingExact応答に指定された JSON フラグメントが含まれていることをアサートします。正確な JSON フラグメントが含まれていません:
$response->assertJsonMissingExact(array $data);
assertJsonMissingValidationErrors$response->assertJsonMissingValidationErrors($keys);
assertJsonStructure
assertNotFoundアサート応答にステータス コードが見つかりません:$response->assertNotFound();
##assertOkアサート応答に 200 がありますステータス コード:$response->assertOk();
応答に指定された Cookie (暗号化されていない) が含まれていることをアサートします:$response->assertPlainCookie($cookieName, $value = null);
応答が指定された URI にリダイレクトされることをアサートします:$response->assertRedirect($uri);
$response->assertSee($value);
$response->assertSeeInOrder(array $values);
# #assertSeeText指定された文字列が応答テキストに含まれていることをアサートします:
$response->assertSeeText($value);
#assertSeeTextInOrder指定された文字列が応答テキストに次の順序で含まれていることをアサートします:
$response->assertSeeTextInOrder(array $values);
##assertSessionHas
セッションが存在することをアサート指定されたデータが含まれています:
##assertSessionHasAllセッションに指定された値リストが含まれていることをアサートします:$response->assertSessionHas($key, $value = null);
$response->assertSessionHasAll(array $data);
assertSessionHasErrorsセッションに指定されたフィールドのエラーが含まれていることをアサートします:$response->assertSessionHasErrors(array $keys, $format = null, $errorBag = 'default');
#assertSessionHasErrorsIn
セッションに指定されたエラーがあることをアサートします:
$response->assertSessionHasErrorsIn($errorBag, $keys = [], $format = null);
assertSessionHasNoErrors
セッションにエラーがないことをアサートします:
$response->assertSessionHasNoErrors();
assertSessionDoesntHaveErrors
Assert セッションには指定されたキー エラーが含まれていません:
$response->assertSessionDoesntHaveErrors($keys = [], $format = null, $errorBag = 'default');
#assertSessionMissingAssert セッションには指定されたキーが含まれていませんキー 固定キー:$response->assertSessionMissing($key);
assertStatus
応答に指定されたステータス コードがあることをアサートします:
$response->assertStatus($code);
#assertSuccessful応答に成功ステータス コードがあることをアサートします:$response->assertSuccessful();
#assertViewHas応答ビューが次であることをアサートします。指定されたセクション データ:
$response->assertViewHas($key, $value = null);
##assertViewHasAll 応答ビューに指定されたデータ リストがあることをアサートします:$response->assertViewHasAll(array $data);
assertViewMissing応答ビューにバインドされたデータの一部が欠落していることをアサートします:$response->assertViewIs($value);
Authentication AssertionsLaravel は、$response->assertViewMissing($key);
PHPUnit
テスト用のさまざまな認証関連のアサーションも提供します。Method
説明 $this->assertAuthenticated($guard = null);Assertion Thisユーザーはすでに認証されています。 $this->assertGuest($guard = null); このユーザーが認証されていないことをアサートします。 $this->assertAuthenticatedAs($user, $guard = null); 指定されたユーザーが認証されていることをアサートします。 $this->assertCredentials(array $credentials, $guard = null); 指定された資格情報が有効であることをアサートします。 $this->assertInvalidCredentials(array $credentials, $guard = null); LearnKu.com Web サイトで初めて公開されました。指定された資格情報が無効であることをアサートします。 この記事は、