HTTPテスト


はじめに

##カスタム リクエスト ヘッダー
    • セッション/認証
    • #テストJSON API
  • テスト ファイルのアップロード
  • 利用可能なアサーション メソッド
  • 応答アサーション
  • 認証アサーション
    • ##

      はじめに

      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 とその応答をテストするためのいくつかのヘルパー関数も提供します。たとえば、jsongetpostputpatchdelete さまざまな 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 テスト用のさまざまな一般的なアサーション メソッドを提供します。これらのアサーションは、jsongetpostput、および delete のテスト メソッドからアクセスできます。

      ##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

      assertCookie

      指定された Cookie が応答に含まれていることをアサートします。
      $response->assertCookie($cookieName, $value = null);

      assertCookieExpired

      指定された Cookie が応答に含まれていて、有効期限が切れていることをアサートします:

      $response->assertCookieExpired($cookieName);

      #assertCookieNotExpired

      指定された Cookie が応答に含まれており、有効期限が切れていないことをアサートします:

      $response->assertCookieNotExpired($cookieName);

      #assertCookieMissing

      指定された Cookie が応答に含まれていないことをアサートします:

      $response->assertCookieMissing($cookieName);

      ##assertDontSee

      Assert指定された 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);

      ##assertJson

      応答に指定された JSON データが含まれていることをアサートします:
      $response->assertJson(array $data);

      ##assertJsonCount

      応答 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

      Assert 応答には、指定されたキー:

      $response->assertJsonMissingValidationErrors($keys);

      assertJsonStructure

      応答が指定された JSON 構造を持つことをアサートします:

      $response->assertJsonStructure(array $structure);
      # ##################################

      assertJsonValidationErrors

      指定されたキーを使用して指定された JSON 検証エラーに対する応答をアサートします:

      $response->assertJsonValidationErrors($keys);

      assertLocation

      応答の

      Location ヘッダーに指定された URI 値があることをアサートします:

      $response->assertLocation($uri);

      assertNotFound

      アサート応答にステータス コードが見つかりません:

      $response->assertNotFound();

      ##assertOk
      アサート応答に 200 がありますステータス コード:

      $response->assertOk();

      assertPlainCookie

      応答に指定された Cookie (暗号化されていない) が含まれていることをアサートします:
      $response->assertPlainCookie($cookieName, $value = null);

      ##assertRedirect

      応答が指定された URI にリダイレクトされることをアサートします:
      $response->assertRedirect($uri);

      assertSee

      指定された文字列が応答に含まれていることをアサートします:
      $response->assertSee($value);

      assertSeeInOrder

      応答に指定された文字列が順番に含まれていることをアサートします:
      $response->assertSeeInOrder(array $values);

      # #assertSeeText指定された文字列が応答テキストに含まれていることをアサートします:

      $response->assertSeeText($value);

      #assertSeeTextInOrder

      指定された文字列が応答テキストに次の順序で含まれていることをアサートします:

      $response->assertSeeTextInOrder(array $values);

      ##assertSessionHas

      セッションが存在することをアサート指定されたデータが含まれています:

      $response->assertSessionHas($key, $value = null);

      ##assertSessionHasAll

      セッションに指定された値リストが含まれていることをアサートします:

      $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');

      #assertSessionMissing

      Assert セッションには指定されたキーが含まれていませんキー 固定キー:

      $response->assertSessionMissing($key);

      assertStatus

      応答に指定されたステータス コードがあることをアサートします:

      $response->assertStatus($code);

      #assertSuccessful

      応答に成功ステータス コードがあることをアサートします:

      $response->assertSuccessful();

      #assertViewHas

      応答ビューが次であることをアサートします。指定されたセクション データ:

      $response->assertViewHas($key, $value = null);

      ##assertViewHasAll
      応答ビューに指定されたデータ リストがあることをアサートします:

      $response->assertViewHasAll(array $data);

      assertViewIs
      Assert ルートは指定されたビューを返します:

      $response->assertViewIs($value);

      assertViewMissing
      応答ビューにバインドされたデータの一部が欠落していることをアサートします:

      $response->assertViewMissing($key);

      Authentication Assertions
      Laravel は、

      PHPUnit

      テスト用のさまざまな認証関連のアサーションも提供します。

      Method説明$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);この記事は、LearnKu.com Web サイトで初めて公開されました。
      Assertion Thisユーザーはすでに認証されています。
      このユーザーが認証されていないことをアサートします。
      指定されたユーザーが認証されていることをアサートします。
      指定された資格情報が有効であることをアサートします。
      指定された資格情報が無効であることをアサートします。