Laravel 8.x HTTPテスト

イントロダクション

Laravelは、アプリケーションにHTTPリクエストを送信し、レスポンスを調べるための非常に流暢なAPIを提供しています。例として、以下に定義している機能テストをご覧ください。

<?php

namespace Tests\Feature;

use Illuminate\Foundation\Testing\RefreshDatabase;
use Illuminate\Foundation\Testing\WithoutMiddleware;
use Tests\TestCase;

class ExampleTest extends TestCase
{
    /**
     * 基本的なテスト例
     *
     * @return void
     */
    public function test_a_basic_request()
    {
        $response = $this->get('/');

        $response->assertStatus(200);
    }
}

getメソッドはアプリケーションにGETリクエストを送信し、assertStatusメソッドは返えされたレスポンスに指定するHTTPステータスコードが必要であることを宣言しています。この単純なアサートに加え、Laravelはレスポンスヘッダ、コンテンツ、JSON構造などを検査するためにさまざまなアサートも用意しています。

リクエストの作成

アプリケーションにリクエストを送信するには、テスト内でgetpostputpatchdeleteメソッドを呼び出してください。これらのメソッドは、実際にはアプリケーションへ「本当の」HTTPリクエストを発行しません。代わりに、ネットワークリクエスト全体が内部でシミュレートされます。

テストリクエストメソッドは、Illuminate\Http\Responseインスタンスを返す代わりに、Illuminate\Testing\TestResponseのインスタンスを返します。これは、アプリケーションのレスポンスの検査を可能にするさまざまな有用なアサートを提供します。

<?php

namespace Tests\Feature;

use Illuminate\Foundation\Testing\RefreshDatabase;
use Illuminate\Foundation\Testing\WithoutMiddleware;
use Tests\TestCase;

class ExampleTest extends TestCase
{
    /**
     * 基本的なテスト例
     *
     * @return void
     */
    public function test_a_basic_request()
    {
        $response = $this->get('/');

        $response->assertStatus(200);
    }
}

Tip!! 利便性を良くするため、テストの実行時にCSRFミドルウェアを自動で無効にします。

リクエストヘッダのカスタマイズ

withHeadersメソッドを使用して、アプリケーションに送信する前にリクエストのヘッダをカスタマイズできます。このメソッドを使用すると、リクエストに必要なカスタムヘッダを追加できます。

<?php

namespace Tests\Feature;

use Tests\TestCase;

class ExampleTest extends TestCase
{
    /**
     * 基本的な機能テストの例
     *
     * @return void
     */
    public function test_interacting_with_headers()
    {
        $response = $this->withHeaders([
            'X-Header' => 'Value',
        ])->post('/user', ['name' => 'Sally']);

        $response->assertStatus(201);
    }
}

クッキー

リクエストを行う前に、withCookieまたはwithCookiesメソッドを使用してクッキー値を設定できます。withCookieメソッドは2つの引数としてCookieの名前と値を引数に取りますが、withCookiesメソッドは名前/値ペアの配列を引数に取ります。

<?php

namespace Tests\Feature;

use Tests\TestCase;

class ExampleTest extends TestCase
{
    public function test_interacting_with_cookies()
    {
        $response = $this->withCookie('color', 'blue')->get('/');

        $response = $this->withCookies([
            'color' => 'blue',
            'name' => 'Taylor',
        ])->get('/');
    }
}

セッション/認証

Laravelは、HTTPテスト中にセッションを操作ためヘルパをいくつか提供しています。まず、withSessionメソッドへ配列を渡し、セッションデータを設定できます。これは、アプリケーションにリクエストを発行する前に、セッションにデータをロードする場合に役立ちます。

<?php

namespace Tests\Feature;

use Tests\TestCase;

class ExampleTest extends TestCase
{
    public function test_interacting_with_the_session()
    {
        $response = $this->withSession(['banned' => false])->get('/');
    }
}

Laravelのセッションは通常、現在認証しているユーザーの状態を維持するために使用します。したがって、actingAsヘルパメソッドは、指定ユーザーを現在のユーザーとして認証する簡単な方法を提供します。たとえば、モデルファクトリを使用して、ユーザーを生成および認証できます。

<?php

namespace Tests\Feature;

use App\Models\User;
use Tests\TestCase;

class ExampleTest extends TestCase
{
    public function test_an_action_that_requires_authentication()
    {
        $user = User::factory()->create();

        $response = $this->actingAs($user)
                         ->withSession(['banned' => false])
                         ->get('/');
    }
}

actingAsメソッドの2番目の引数としてガード名を渡すことにより、特定のユーザーを認証するために使用するガードを指定することもできます。

$this->actingAs($user, 'api')

レスポンスのデバッグ

アプリケーションにテストリクエストを送ったあとは、dumpdumpHeadersdumpSessionメソッドを使用して、レスポンスの内容を調べてデバッグできます。

<?php

namespace Tests\Feature;

use Illuminate\Foundation\Testing\RefreshDatabase;
use Illuminate\Foundation\Testing\WithoutMiddleware;
use Tests\TestCase;

class ExampleTest extends TestCase
{
    /**
     * 基本的なテスト例
     *
     * @return void
     */
    public function test_basic_test()
    {
        $response = $this->get('/');

        $response->dumpHeaders();

        $response->dumpSession();

        $response->dump();
    }
}

JSON APIのテスト

Laravelは、JSON APIとそのレスポンスをテストするためのヘルパもいくつか提供しています。たとえば、jsongetJsonpostJsonputJsonpatchJsondeleteJsonoptionsJsonメソッドを使用して、さまざまなHTTP動詞でJSONリクエストを発行できます。これらのメソッドにデータとヘッダを簡単に渡すこともできます。まず、/api/userに対してPOSTリクエストを作成し、期待されるJSONデータが返されたことを宣言するテストを作成しましょう。

<?php

namespace Tests\Feature;

use Tests\TestCase;

class ExampleTest extends TestCase
{
    /**
     * 基本的な機能テストの例
     *
     * @return void
     */
    public function test_making_an_api_request()
    {
        $response = $this->postJson('/api/user', ['name' => 'Sally']);

        $response
            ->assertStatus(201)
            ->assertJson([
                'created' => true,
            ]);
    }
}

さらに、JSONレスポンスデータは、レスポンス上の配列変数としてアクセスできるため、JSONレスポンス内で返された個々の値を調べるのに便利です。

$this->assertTrue($response['created']);

Tip!! assertJsonメソッドはレスポンスを配列に変換し、PHPUnit::assertArraySubsetを利用して、指定する配列がアプリケーションによって返されるJSONレスポンス内に存在することを確認しています。したがって、JSONレスポンスに他のプロパティがある場合でも、指定するフラグメントが存在する限り、このテストは合格します。

厳密なJSON一致のアサート

前述のように、assertJsonメソッドを使用して、JSONのフラグメントがJSONレスポンス内に存在することをアサートできます。指定した配列とアプリケーションが返してきたJSONが完全に一致することを確認したい場合は、assertExactJsonメソッドを使用する必要があります。

<?php

namespace Tests\Feature;

use Tests\TestCase;

class ExampleTest extends TestCase
{
    /**
     * 基本的な機能テストの例
     *
     * @return void
     */
    public function test_asserting_an_exact_json_match()
    {
        $response = $this->json('POST', '/user', ['name' => 'Sally']);

        $response
            ->assertStatus(201)
            ->assertExactJson([
                'created' => true,
            ]);
    }
}

JSONパスでのアサート

JSONレスポンスの指定パスに指定データが含まれていることを確認する場合は、assertJsonPathメソッドを使用する必要があります。

<?php

namespace Tests\Feature;

use Tests\TestCase;

class ExampleTest extends TestCase
{
    /**
     * 基本的な機能テストの例
     *
     * @return void
     */
    public function test_asserting_a_json_paths_value()
    {
        $response = $this->json('POST', '/user', ['name' => 'Sally']);

        $response
            ->assertStatus(201)
            ->assertJsonPath('team.owner.name', 'Darian');
    }
}

FluentなJSONテスト

また、LaravelはアプリケーションのJSONレスポンスを流暢にテストする美しい方法を提供しています。まず始めに、assertJsonメソッドにクロージャを渡します。このクロージャは、アプリケーションが返すJSONに対してアサートを行うために使用できる、Illuminate\Testing\Fluent\AssertableJsonのインスタンスで呼び出されます。whereメソッドはJSONの特定の属性に対してアサートを行うために使用でき、missingメソッドはJSONに特定の属性がないことをアサートするために使用できます。

use Illuminate\Testing\Fluent\AssertableJson;

/**
 * 基本的な機能テストの例
 *
 * @return void
 */
public function test_fluent_json()
{
    $response = $this->json('GET', '/users/1');

    $response
        ->assertJson(fn (AssertableJson $json) =>
            $json->where('id', 1)
                 ->where('name', 'Victoria Faith')
                 ->missing('password')
                 ->etc()
        );
}

etcメソッドを理解する

上記の例では、アサートのチェーンの最後でetcメソッドを呼び出したことに気づかれた方もいらっしゃるでしょう。このメソッドはLaravelへJSONオブジェクト中に他の属性が存在する可能性があることを伝えます。etcメソッドが使用されていない場合は、JSONオブジェクトに他の属性が存在していることをアサートしていないため、テストは失敗します。

この動作の意図は、属性に対して明示的にアサーションを行うか、etc メソッドで追加の属性を明示的に許可することで、JSONレスポンスで意図せず機密情報を公開してしまうことを防ぐことにあります。

JSONコレクションに対するアサート

多くの場合、ルートは複数のユーザーなど、複数の項目を含むJSONレスポンスを返します。

Route::get('/users', function () {
    return User::all();
});

このような状況では、レスポンスに含まれているユーザーに対するアサートを行うために、fluentなJSONオブジェクトのhasメソッドを使用することができます。例として、JSONレスポンスに3つのユーザーが含まれていることをアサートしましょう。次に、firstメソッドを使用して、コレクション内の最初のユーザーに関するいくつかのアサートを行います。firstメソッドは、JSONコレクション内の最初のオブジェクトに関するアサートを行うために使用できる別のアサートJSON文字列を受信するクロージャを引数に取ります。

$response
    ->assertJson(fn (AssertableJson $json) =>
        $json->has(3)
             ->first(fn ($json) =>
                $json->where('id', 1)
                     ->where('name', 'Victoria Faith')
                     ->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 ($json) =>
                $json->where('id', 1)
                     ->where('name', 'Victoria Faith')
                     ->missing('password')
                     ->etc()
             )
    );

ただし、hasコレクションにhasコレクションにアサートする2つの別々の呼び出しをするのではなく、クロージャを3番目の引数に渡す呼び出し一つにまとめられます。これで、クロージャが自動的に呼び出され、コレクション内の最初の項目にスコープされます。

$response
    ->assertJson(fn (AssertableJson $json) =>
        $json->has('meta')
             ->has('users', 3, fn ($json) =>
                $json->where('id', 1)
                     ->where('name', 'Victoria Faith')
                     ->missing('password')
                     ->etc()
             )
    );

JSONタイプのアサート

JSONレスポンス内のプロパティが特定の型のものであることをアサートできます。Illuminate\Testing\Fluent\AssertableJsonクラスは、これを行うwhereTypewhereAllTypeメソッドを提供しています。

$response->assertJson(fn (AssertableJson $json) =>
    $json->whereType('id', 'integer')
         ->whereAllType([
            'users.0.name' => 'string',
            'meta' => 'array'
        ])
);

複数のタイプを指定するには | 文字を使用するか、タイプの配列を whereType メソッドの 2 番目のパラメータとして渡します。レスポンスの値がリストアップされたタイプのいずれかであれば、アサーションは成功します。

$response->assertJson(fn (AssertableJson $json) =>
    $json->whereType('name', 'string|null')
         ->whereType('id', ['string', 'integer'])
);

whereTypewhereTypeAllメソッドは、stringintegerdoublebooleanarraynullタイプを認識します。

ファイルアップロードのテスト

Illuminate\Http\UploadedFileクラスは、テスト用のダミーファイルまたは画像を生成するために使用できるfakeメソッドを提供しています。これをStorageファサードのfakeメソッドと組み合わせると、ファイルアップロードのテストが大幅に簡素化されます。たとえば、次の2つの機能を組み合わせて、アバターのアップロードフォームを簡単にテストできます。

<?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 test_avatars_can_be_uploaded()
    {
        Storage::fake('avatars');

        $file = UploadedFile::fake()->image('avatar.jpg');

        $response = $this->post('/avatar', [
            'avatar' => $file,
        ]);

        Storage::disk('avatars')->assertExists($file->hashName());
    }
}

指定ファイルが存在しないことを宣言したい場合は、Storageファサードが提供するassertMissingメソッドを使用できます。

Storage::fake('avatars');

// ...

Storage::disk('avatars')->assertMissing('missing.jpg');

fakeファイルのカスタマイズ

UploadedFileクラスが提供する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'
);

ビューのテスト

Laravelを使用すると、アプリケーションに対してシミュレートするHTTPリクエストを作成せずにビューをレンダーすることもできます。それには、テスト内でviewメソッドを呼び出してください。viewメソッドは、ビュー名とオプションのデータ配列を引数に取ります。このメソッドはIlluminate\Testing\TestViewのインスタンスを返します。これは、ビューのコンテンツに関するアサートを簡単に作成するためのメソッドをいくつか提供しています。

<?php

namespace Tests\Feature;

use Tests\TestCase;

class ExampleTest extends TestCase
{
    public function test_a_welcome_view_can_be_rendered()
    {
        $view = $this->view('welcome', ['name' => 'Taylor']);

        $view->assertSee('Taylor');
    }
}

TestViewクラスは、次のアサートメソッドを提供します。assertSeeassertSeeInOrderassertSeeTextassertSeeTextInOrderassertDontSeeassertDontSeeText

必要に応じて、TestViewインスタンスを文字列にキャストすることで、レンダリングされた素のビューコンテンツを取得できます。

$contents = (string) $this->view('welcome');

エラーの共有

一部のビューは、Laravelが提供するグローバルエラーバッグで共有されるエラーに依存する場合があります。エラーバッグをエラーメッセージでハイドレイトするには、withViewErrorsメソッドを使用できます。

$view = $this->withViewErrors([
    'name' => ['Please provide a valid name.']
])->view('form');

$view->assertSee('Please provide a valid name.');

Bladeとコンポーネントのレンダー

必要に応じて、bladeメソッドを使用して、素のBlade文字列を評価およびレンダーできます。viewメソッドと同様に、bladeメソッドはIlluminate\Testing\TestViewのインスタンスを返します。

$view = $this->blade(
    '<x-component :name="$name" />',
    ['name' => 'Taylor']
);

$view->assertSee('Taylor');

componentメソッドを使用して、ブレードコンポーネントを評価およびレンダーできます。viewメソッドと同様に、componentメソッドはIlluminate\Testing\TestViewのインスタンスを返します。

$view = $this->component(Profile::class, ['name' => 'Taylor']);

$view->assertSee('Taylor');

利用可能なアサート

レスポンスのアサート

LaravelのIlluminate\Testing\TestResponseクラスは、アプリケーションをテストするときに利用できるさまざまなカスタムアサートメソッドを提供します。これらのアサートは、jsongetpostputdeleteテストメソッドが返すレスポンスからアクセスできます。

assertCookie

レスポンスに指定するクッキーが含まれていることを宣言します。

$response->assertCookie($cookieName, $value = null);

assertCookieExpired

レスポンスに指定するクッキーが含まれており、有効期限が切れていることを宣言します。

$response->assertCookieExpired($cookieName);

assertCookieNotExpired

レスポンスに指定するクッキーが含まれており、有効期限が切れていないことを宣言します。

$response->assertCookieNotExpired($cookieName);

assertCookieMissing

レスポンスに指定するクッキーが含まれていないことを宣言します。

$response->assertCookieMissing($cookieName);

assertCreated

レスポンスに201 HTTPステータスコードがあることを宣言します。

$response->assertCreated();

assertDontSee

指定する文字列が、アプリケーションが返すレスポンスに含まれていないことを宣言します。このアサートは、2番目の引数にfalseを渡さない限り、指定する文字列を自動的にエスケープします。

$response->assertDontSee($value, $escaped = true);

assertDontSeeText

指定する文字列がレスポンステキストに含まれていないことを宣言します。このアサートは、2番目の引数にfalseを渡さない限り、指定する文字列を自動的にエスケープします。このメソッドは、アサートを作成する前に、レスポンスコンテンツをstrip_tags PHP関数へ渡します。

$response->assertDontSeeText($value, $escaped = true);

assertExactJson

レスポンスに、完全一致する指定JSONデータが含まれていることを宣言します。

$response->assertExactJson(array $data);

assertForbidden

レスポンスにForbidden(403)HTTPステータスコードがあることを宣言します。

$response->assertForbidden();

assertHeader

指定するヘッダと値がレスポンスに存在することを宣言します。

$response->assertHeader($headerName, $value = null);

assertHeaderMissing

指定するヘッダがレスポンスに存在しないことを宣言します。

$response->assertHeaderMissing($headerName);

assertJson

レスポンスに指定するJSONデータが含まれていることを宣言します。

$response->assertJson(array $data, $strict = false);

assertJsonメソッドはレスポンスを配列に変換し、PHPUnit::assertArraySubsetを利用して、指定する配列がアプリケーションが返すJSONレスポンス内に存在しているかを確認します。したがって、JSONレスポンスに他のプロパティがある場合でも、指定するフラグメントが存在する限り、このテストは合格します。

assertJsonCount

レスポンスJSONに、指定するキーに予想されるアイテム数の配列があることを宣言します。

$response->assertJsonCount($count, $key = null);

assertJsonFragment

レスポンス中のどこかに指定JSONデータが含まれていることを宣言します。

Route::get('/users', function () {
    return [
        'users' => [
            [
                'name' => 'Taylor Otwell',
            ],
        ],
    ];
});

$response->assertJsonFragment(['name' => 'Taylor Otwell']);

assertJsonMissing

レスポンスに指定するJSONデータが含まれていないことを宣言します。

$response->assertJsonMissing(array $data);

assertJsonMissingExact

レスポンスに完全一致するJSONデータが含まれていないことを宣言します。

$response->assertJsonMissingExact(array $data);

assertJsonMissingValidationErrors

指定するキーのJSONバリデーションエラーがレスポンスにないことを宣言します。

$response->assertJsonMissingValidationErrors($keys);

assertJsonPath

レスポンスに、指定するパスの指定するデータが含まれていることを宣言します。

$response->assertJsonPath($path, $expectedValue);

たとえば、アプリケーションが返すJSONレスポンスに次のデータが含まれている場合:

{
    "user": {
        "name": "Steve Schoger"
    }
}

userオブジェクトのnameプロパティが次のように指定する値に一致すると宣言することができます。

$response->assertJsonPath('user.name', 'Steve Schoger');

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

assertLocation

レスポンスのLocationヘッダに指定するURI値があることを宣言します。

$response->assertLocation($uri);

assertNoContent

レスポンスに指定するHTTPステータスコードがあり、コンテンツがないことを宣言します。

$response->assertNoContent($status = 204);

assertNotFound

レスポンスにNot Found(404)HTTPステータスコードがあることを宣言します。

$response->assertNotFound();

assertOk

レスポンスに200 HTTPステータスコードがあることを宣言します。

$response->assertOk();

assertPlainCookie

レスポンスに指定する暗号化されていないクッキーが含まれていることを宣言します。

$response->assertPlainCookie($cookieName, $value = null);

assertRedirect

レスポンスが指定するURIへのリダイレクトであることを宣言します。

$response->assertRedirect($uri);

assertSee

指定する文字列がレスポンスに含まれていることを宣言します。このアサートは、2番目の引数にfalseを渡さない限り、指定する文字列を自動的にエスケープします。

$response->assertSee($value, $escaped = true);

assertSeeInOrder

指定する文字列がレスポンス内に順番に含まれていることを宣言します。このアサートは、2番目の引数へfalseを渡さない限り、指定する文字列を自動的にエスケープします。

$response->assertSeeInOrder(array $values, $escaped = true);

assertSeeText

指定する文字列がレスポンステキストに含まれていることを宣言します。このアサートは、2番目の引数にfalseを渡さない限り、指定する文字列を自動的にエスケープします。アサートが作成される前に、レスポンスの内容がstrip_tagsPHP関数に渡されます。

$response->assertSeeText($value, $escaped = true);

assertSeeTextInOrder

指定する文字列がレスポンステキスト内に順番に含まれていることを宣言します。このアサートは、2番目の引数にfalseを渡さない限り、指定する文字列を自動的にエスケープします。アサートが作成される前に、レスポンスの内容がstrip_tagsPHP関数に渡されます。

$response->assertSeeTextInOrder(array $values, $escaped = true);

assertSessionHas

セッションに指定するデータが含まれていることを宣言します。

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

assertSessionHasInput

セッションの一時保存されている入力配列に指定する値があることを宣言します。

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

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.'
]);

assertSessionHasErrorsIn

指定エラーバッグ内に指定する$keysのエラーがセッションに含まれていることを宣言します。$keysが連想配列の場合、セッションにはエラーバッグ内の各フィールド(キー)に特定のエラーメッセージ(値)が含まれていることを宣言します。

$response->assertSessionHasErrorsIn($errorBag, $keys = [], $format = null);

assertSessionHasNoErrors

セッションにバリデーションエラーがないことを宣言します。

$response->assertSessionHasNoErrors();

assertSessionDoesntHaveErrors

指定するキーのバリデーションエラーがセッションにないことを宣言します。

$response->assertSessionDoesntHaveErrors($keys = [], $format = null, $errorBag = 'default');

assertSessionMissing

セッションに指定するキーが含まれていないことを宣言します。

$response->assertSessionMissing($key);

assertStatus

レスポンスに指定HTTPステータスコードがあることを宣言します。

$response->assertStatus($code);

assertSuccessful

レスポンスに成功した(>=200および<300)HTTPステータスコードがあることを宣言します。

$response->assertSuccessful();

assertUnauthorized

レスポンスに不正な(401)HTTPステータスコードがあることを宣言します。

$response->assertUnauthorized();

assertViewHas

指定するデータの部分がレスポンスビューに含まれていることを宣言します。

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

さらに、ビューデータはレスポンスの配列変数としてアクセスできるため、次のように容易に検査できます。

$this->assertEquals('Taylor', $response['name']);

assertViewHasAll

レスポンスビューに指定するデータのリストがあることを宣言します。

$response->assertViewHasAll(array $data);

このメソッドは、ビューに指定するキーに一致するデータが含まれていることを宣言するために使用できます。

$response->assertViewHasAll([
    'name',
    'email',
]);

または、ビューデータが存在し、特定の値を持っていると宣言することもできます。

$response->assertViewHasAll([
    'name' => 'Taylor Otwell',
    'email' => 'taylor@example.com,',
]);

assertViewIs

指定するビューがルートによって返されたことを宣言します。

$response->assertViewIs($value);

assertViewMissing

指定するデータキーが、アプリケーションのレスポンスで返されたビューで使用可能になっていないことを宣言します。

$response->assertViewMissing($key);

認証のアサート

Laravelは、アプリケーションの機能テストで利用できるさまざまな認証関連のアサートも提供します。これらのメソッドは、getpostなどのメソッドによって返されるIlluminate\Testing\TestResponseインスタンスではなく、テストクラス自体で呼び出されることに注意してください。

assertAuthenticated

ユーザーが認証済みであることを宣言します。

$this->assertAuthenticated($guard = null);

assertGuest

ユーザーが認証されていないことを宣言します。

$this->assertGuest($guard = null);

assertAuthenticatedAs

特定のユーザーが認証済みであることを宣言します。

$this->assertAuthenticatedAs($user, $guard = null);

ドキュメント章別ページ

ヘッダー項目移動

注目:アイコン:ページ内リンク設置(リンクがないヘッダーへの移動では、リンクがある以前のヘッダーのハッシュをURLへ付加します。

移動

クリックで即時移動します。

設定

適用ボタンクリック後に、全項目まとめて適用されます。

カラーテーマ
和文指定 Pagination
和文指定 Scaffold
Largeスクリーン表示幅
インデント
本文フォント
コードフォント
フォント適用確認

フォントの指定フィールドから、フォーカスが外れると、当ブロックの内容に反映されます。EnglishのDisplayもPreviewしてください。

フォント設定時、表示に不具合が出た場合、当サイトのクッキーを削除してください。

バックスラッシュを含むインライン\Code\Blockの例です。

以下はコードブロックの例です。

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class User extends Model
{
    /**
     * ユーザに関連する電話レコードを取得
     */
    public function phone()
    {
        return $this->hasOne('App\Phone');
    }
}

設定を保存する前に、表示が乱れないか必ず確認してください。CSSによるフォントファミリー指定の知識がない場合は、フォントを変更しないほうが良いでしょう。

キーボード・ショートカット

オープン操作

PDC

ページ(章)移動の左オフキャンバスオープン

HA

ヘッダー移動モーダルオープン

MS

移動/設定の右オフキャンバスオープン

ヘッダー移動

T

最初のヘッダーへ移動

E

最後のヘッダーへ移動

NJ

次ヘッダー(H2〜H4)へ移動

BK

前ヘッダー(H2〜H4)へ移動

その他

?

このヘルプページ表示
閉じる