Lang x Lang

HTTP Tests

Table of Contents

Introduction

Laravel は、あなたの application への HTTP requests を作成し、response を調査するための非常に流暢な API を提供しています。例えば、以下に定義された feature test を見てみましょう:

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

GETmethod は getrequest を application に送信し、assertStatusmethod は、返された response は指定された HTTP status コードを持つべきであることを確認します。この単純なアサーションに加えて、Laravel は、responseheaders、content、JSON 構造などを検査するためのさまざまなアサーションも含んでいます。

Making Requests

あなたの application に対して request を行うためには、テスト内で getpostputpatch、または delete メソッドを呼び出すことができます。これらのメソッドは実際には "real" な HTTP request をあなたの application に対して発行しません。その代わりに、ネットワーク全体の request を内部的にシミュレートします。

Illuminate\Http\Response インスタンスを返す代わりに、テストの request メソッドは 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);
    }
}

一般的に、各テストは、 application に対して request を 1 つだけ行うべきです。複数のリクエストが single テスト method 内で実行されると、予期しない動作が発生する可能性があります。

NOTE

便宜上、テスト実行時には CSRF middleware は自動的に無効化されます。

Request Headers のカスタマイズ

withHeadersの method を使用することで、request が application に送信される前に request の headers をカスタマイズできます。この method を使用することで、request に任意の customheaders を追加できます。

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

Cookies

withCookieまたはwithCookiesのメソッドを使用して、 request を行う前に cookie values を設定することができます。withCookieの method は、 cookie 名と value をその二つの引数として受け入れます。一方、withCookiesの method は、名前/ value のペアの array を受け入れます。

<?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('/');

        //
    }
}

Session / Authentication

Laravel は、HTTPtest 中に session とやり取りするためのいくつかの helpers を提供しています。まず、withSession method を使用して、セッションデータを指定の array に設定することができます。これは、request をあなたの application に発行する前に session に data をロードするのに便利です:

<?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('/');

        //
    }
}

Laravel の session は通常、現在認証されている user の state を維持するために使用されます。したがって、actingAsヘルパー method は、特定の user を現在の user として認証する簡単な方法を提供します。例えば、model factoryを使用して user を生成し、認証することができます:

<?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('/');

        //
    }
}

また、どのガードを使用して指定した user を認証するかを、ガード名をactingAs method の第二引数として渡すことで指定することもできます。 actingAs method に提供されるガードは、テストの期間中、 default のガードにもなります:

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

Debugging のレスポンス

あなたの application にテストの request を行った後、dumpdumpHeaders、そしてdumpSessionメソッドを使用して、 response の内容を調べて debug することができます:

<?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();
    }
}

あるいは、ddddHeadersddSessionメソッドを使用して、 response に関する情報を dump した後、実行を停止することもできます:

<?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();
    }
}

例外処理

時々、あなたの application が特定の例外をスローしているかどうかをテストする必要があるかもしれません。これを達成するために、Exceptions facade を使って例外 handler を偽造することができます。一度例外 handler が偽造されてしまうと、assertReportedassertNotReportedメソッドを使って、 request の間にスローされた exceptions に対してアサーションを行うことができます。

<?php

use App\Exceptions\InvalidOrderException;
use Illuminate\Support\Facades\Exceptions;

test('exception is thrown', function () {
    Exceptions::fake();

    $response = $this->get('/order/1');

    // Assert an exception was thrown...
    Exceptions::assertReported(InvalidOrderException::class);

    // Assert against the exception...
    Exceptions::assertReported(function (InvalidOrderException $e) {
        return $e->getMessage() === 'The order was invalid.';
    });
});
<?php

namespace Tests\Feature;

use App\Exceptions\InvalidOrderException;
use Illuminate\Support\Facades\Exceptions;
use Tests\TestCase;

class ExampleTest extends TestCase
{
    /**
     * A basic test example.
     */
    public function test_exception_is_thrown(): void
    {
        Exceptions::fake();

        $response = $this->get('/');

        // Assert an exception was thrown...
        Exceptions::assertReported(InvalidOrderException::class);

        // Assert against the exception...
        Exceptions::assertReported(function (InvalidOrderException $e) {
            return $e->getMessage() === 'The order was invalid.';
        });
    }
}

assertNotReportedおよびassertNothingReportedmethods は、特定の例外が request 中に throw されなかったことや、例外が全く throw されなかったことを確認するために使用できます。

Exceptions::assertNotReported(InvalidOrderException::class);

Exceptions::assertNothingReported();

特定の request に対して例外処理を完全に無効にするには、 request を行う前に withoutExceptionHandling method を呼び出すことができます。

$response = $this->withoutExceptionHandling()->get('/');

また、あなたの application が PHP 言語やその application が使用しているライブラリによって非推奨とされた features を利用していないことを確認したい場合は、 request を行う前にwithoutDeprecationHandling method を呼び出すことができます。 非推奨の処理が無効化されると、非推奨の警告は exceptions に変換され、その結果、あなたのテストが失敗します。

$response = $this->withoutDeprecationHandling()->get('/');

assertThrows method は、指定された type の例外を投げる特定のクロージャ内のコードを assert するために使用できます:

$this->assertThrows(
    fn () => (new ProcessOrder)->execute(),
    OrderInvalid::class
);

Testing JSON APIs

Laravel は、JSONAPI とその response を testing するためのいくつかの helpers も提供しています。たとえば、jsongetJsonpostJsonputJsonpatchJsondeleteJsonoptionsJsonmethods を使用して、様々な HTTP 動詞で JSON リクエストを発行することができます。また、これらの methods に data や headers を簡単に渡すこともできます。さあ始めましょう、POSTの request を /api/userに対して行い、期待される JSONdata が返されたことを assert する testing を書きましょう:

<?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 response data は、 response 上の array 変数としてアクセスできるため、 JSON response 内に返される個々の values を便利に確認することができます:

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

NOTE

assertJsonの method は、 response を array に変換し、PHPUnit::assertArraySubsetを利用して、指定された array が application が返す JSON response 内に存在することを確認します。そのため、 JSON response に他のプロパティがあっても、指定された fragment が存在していれば、このテストはパスします。

正確な JSON の一致を主張する

前述の通り、assertJson method は、JSON レスポンス内に JSON の一部が存在していることを確認するために使用できます。もし特定の array があなたの application から返される JSON と完全に一致していることを確認したい場合は、assertExactJson method を使用すべきです:

<?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 パスについて主張する

もし、指定した path で与えられた data が JSON response に含まれることを確認したい場合は、assertJsonPath method を使用するべきです:

<?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 method はクロージャも受け入れます。これは、アサーションがパスするべきかどうかを動的に判断するために使用できます。

$response->assertJsonPath('team.owner.name', fn (string $name) => strlen($name) >= 3);

流暢な JSON Testing

Laravel は、application の JSON レスポンスを流暢に test する美しい方法も提供しています。始めるには、クロージャーをassertJson method に渡します。このクロージャーはIlluminate\Testing\Fluent\AssertableJsonのインスタンスで呼び出され、このインスタンスは、application によって返された JSON に対してアサーションを行うために使用することができます。where method は、JSON の特定の属性に対してアサーションを行うために使用することができます。一方、missing method は、特定の属性が JSON から欠落していることを assert するために使用することができます:

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の Method を理解する

上記の例で、私たちが etcmethod をアサーションチェーンの最後に呼び出したことに気づいたかもしれません。この method は、Laravel に対して他の属性が JSONobject 上に存在する可能性があることを伝えます。etcmethod が使用されていない場合、test はあなたがアサーションを行わなかった他の属性が JSONobject 上に存在する場合に失敗します。

この動作の背後にある意図は、 attribute に対して明示的に主張を行うか、etcを通じて追加の attributes を明示적に許可することにより、あなたが無意識に JSON responses 内の機密情報を公開することからあなたを保護するためです。 method 。

ただし、etc method をアサーションチェーンに含めないことが、JSONobject 内にネストされた arrays に追加の属性が追加されていないことを保証するわけではないことに注意してください。 etc method が保証するのは、etc method が呼び出されているネストレベルで追加の属性が存在しないことだけです。

Attribute の存在/不在を主張する

属性が存在するか否かを assert するためには、has および missing method を使用できます:

$response->assertJson(fn (AssertableJson $json) =>
    $json->has('data')
         ->missing('message')
);

また、hasAllmissingAllのメソッドを使用することで、複数の attributes が同時に存在するか否かを確認することができます:

$response->assertJson(fn (AssertableJson $json) =>
    $json->hasAll(['status', 'data'])
         ->missingAll(['message', 'code'])
);

hasAny method を使って、指定されたリストの attributes のうち少なくとも 1 つが存在するかどうかを判断することができます:

$response->assertJson(fn (AssertableJson $json) =>
    $json->has('status')
         ->hasAny('data', 'message', 'code')
);

JSON Collections に対する主張

よく、あなたの route は、複数の users など、複数の項目を含む JSON response を返します。

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

これらの状況では、fluent JSON オブジェクトの has method を使用して、 response に含まれる users に対する主張を行う場合があります。例えば、 JSON response が三つの users を含んでいることを assert しましょう。次に、first method を使用して、 collection の最初の user についていくつかの主張を行います。first method は、最初の object についての主張を行うために使用できる別の主張可能な JSON string を受け取るクロージャーを受け入れます。 JSON collection についてです:

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

JSONCollection アサーションの範囲設定

時々、あなたのアプリケーションの routes は、名前付きの keys が割り当てられた JSON collections を返すことがあります:

Route::get('/users', function () {
    return [
        'meta' => [...],
        'users' => User::all(),
    ];
})

これらの routes を testing するとき、has method を使用して、 collection 内のアイテム数に対して assert することができます。さらに、一連のアサーションを scope するためにも has method を使用することができます:

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

しかし、users collection に対してhas method を二回呼び出す代わりに、第三パラメータとしてクロージャを提供する単一の呼び出しを行うことができます。そうすると、クロージャは自動的に呼び出され、collection 内の最初のアイテムに scope が適用されます。

$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 response のプロパティが特定の type であることを assert したいかもしれません。Illuminate\Testing\Fluent\AssertableJson class は、まさにそのためのwhereTypeおよびwhereAllTypeメソッドを提供します。

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

| 文字を使用して複数の types を指定するか、whereType method の 2 番目のパラメータとして types の array を渡すことができます。 response value がリストされた types のいずれかであれば、アサーションは成功します。

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

whereTypewhereAllTypeメソッドは次のタイプを認識します:stringintegerdoublebooleanarray、そしてnull

Testing File Uploads

Illuminate\Http\UploadedFileの class は、 fakeの method を提供しており、これを使用してダミーファイルや画像を testing 用に生成することができます。これをStorageファサードのfake method と組み合わせることで、ファイルアップロードの testing が大幅に簡単になります。例えば、これら 2 つの features を組み合わせて、アバターアップロードフォームのテストを簡単に行うことができます:

<?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());
    }
}

指定したファイルが存在しないと assert したい場合は、 Storage facade が提供する assertMissing method を使用することができます:

Storage::fake('avatars');

// ...

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

Fake ファイル カスタマイズ

UploadedFileの class で提供されるfakeの method を使用してファイルを作成する際には、application の validation ルールをより良く test するために、 image の幅、高さ、サイズ(キロバイト単位)を指定することができます:

UploadedFile::fake()->image('avatar.jpg', $width, $height)->size(100);

画像を作成することに加えて、create method を使用して他の任意の type のファイルを作成することもできます。

UploadedFile::fake()->create('document.pdf', $sizeInKilobytes);

必要であれば、ファイルによって返されるべき MIME type を明示的に定義するために、$mimeType引数を method に渡すことができます。

UploadedFile::fake()->create(
    'document.pdf', $sizeInKilobytes, 'application/pdf'
);

Testing Views

Laravel は、 application へのシミュレートされた HTTP request を作成せずに、 view を render することも許可しています。これを達成するためには、test 内でview method を呼び出すことができます。view method は、 view の名前と、option の data の array を受け入れます。 method は、ビューの内容について便利に主張を行うためのいくつかのメソッドを提供するIlluminate\Testing\TestViewのインスタンスを返します:

<?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 class は、次のアサーションメソッドを提供します:assertSeeassertSeeInOrderassertSeeTextassertSeeTextInOrderassertDontSeeassertDontSeeText

必要に応じて、TestViewインスタンスを string にキャストすることで、生の、レンダリングされた view の内容を取得することができます:

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

Errors の共有

いくつかの views は、Laravel が提供するグローバルな error バッグで共有される errors に依存する可能性があります。 error メッセージを error バッグにハイドレートするためには、withViewErrors method を使用することができます。

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

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

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

必要に応じて、bladeの method を使用して、生のBlade string を評価し、 render することができます。 viewの method と同様に、bladeの method はIlluminate\Testing\TestViewのインスタンスを返します。

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

$view->assertSee('Taylor');

componentの method を使用して、Blade componentを評価し、 render することができます。componentの method は、Illuminate\Testing\TestComponentのインスタンスを返します。

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

$view->assertSee('Taylor');

Available Assertions

Response アサーション

Laravel のIlluminate\Testing\TestResponse class は、 application を testing する際に利用できる様々な custom アサーション methods を提供しています。これらのアサーションは、jsongetpostputdeleteのテスト methods によって返される response でアクセス可能です:

assertBadRequest

Assert により、悪い request (400)の response が HTTP status code であることを主張します:

$response->assertBadRequest();

assertAccepted

Assert は、 response が承認(202)された HTTP status code を持っていることを主張します:

$response->assertAccepted();

assertConflict

response が競合(409)の HTTP status コードを持つことを Assert します:

$response->assertConflict();

assertCookie

与えられた cookie が response に含まれていることを Assert します。

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

assertCookieExpired

指定した cookie が response に含まれ、それが期限切れであることを Assert します:

$response->assertCookieExpired($cookieName);

assertCookieNotExpired

与えられた cookie を含み、それが期限切れでないことを Assert してください:

$response->assertCookieNotExpired($cookieName);

assertCookieMissing

与えられた cookie を含まないという response を Assert します:

$response->assertCookieMissing($cookieName);

assertCreated

Assert とは、 response が 201 の HTTP status code を持っていることを主張します:

$response->assertCreated();

assertDontSee

指定された string が、 application によって返された response に含まれていないことを Assert します。このアサーションは、falseを第二引数として渡さない限り、指定された string unless を自動的にエスケープします。

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

assertDontSeeText

与えられた string が response テキスト内に含まれていないことを Assert します。この主張は、falseの 2 つ目の引数を渡さない限り、与えられた string unless を自動的にエスケープします。この method は、アサーションを行う前に response content をstrip_tags PHP 関数に渡します。

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

assertDownload

response がダウンロードであることを Assert します。通常、これは呼び出された route がResponse::download response、BinaryFileResponse、またはStorage::download response を返したことを意味します。

$response->assertDownload();

ご希望であれば、ダウンロード可能なファイルに特定のファイル名が割り当てられたと assert することができます:

$response->assertDownload('image.jpg');

assertExactJson

指定した JSON data が正確に match するような response を Assert する

$response->assertExactJson(array $data);

assertForbidden

response が禁止(403)の HTTP status code を持つことを Assert します:

$response->assertForbidden();

assertFound

Assert により、 response が見つかった(302) HTTP status code を持っていることを確認します:

$response->assertFound();

assertGone

response が gone(410)の HTTP status コードであることを Assert します:

$response->assertGone();

assertHeader

与えられた header と value が response に存在することを Assert します:

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

assertHeaderMissing

与えられた header が response に存在しないことを Assert します:

$response->assertHeaderMissing($headerName);

assertInternalServerError

Assert が response に Internal Server Error(500) HTTP status コードを持っていることを主張します:

$response->assertInternalServerError();

assertJson

指定された JSON data を含む response を Assert します:

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

assertJson method は、 response を array に変換し、PHPUnit::assertArraySubsetを使用して指定された array が application によって返された JSON response 内に存在することを確認します。したがって、 JSON response に他のプロパティが存在していても、指定された fragment が存在する限り、この test は path します。

assertJsonCount

指定したキーで期待される数量のアイテムを持つ array が response JSON に存在することを Assert します:

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

assertJsonFragment

response が与えられた JSON data を response のどこかに含むことを Assert します:

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

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

assertJsonIsArray

Assert というのは、 response JSON が array であると主張します:

$response->assertJsonIsArray();

assertJsonIsObject

Assert は、 response JSON が object であると主張します:

$response->assertJsonIsObject();

assertJsonMissing

与えられた JSON data を含まないことを response が Assert していることを主張します:

$response->assertJsonMissing(array $data);

assertJsonMissingExact

正確な JSON data が response に含まれていないことを Assert します:

$response->assertJsonMissingExact(array $data);

assertJsonMissingValidationErrors

与えられた keys に対して、 response が JSON validation errors を持たないことを Assert します:

$response->assertJsonMissingValidationErrors($keys);

NOTE

より汎用的なassertValid method は、response に validation errors が JSON として返されていない、そして errors が session storage にフラッシュされていないことを assert するために使用できます。

assertJsonPath

指定された path で指定された data が response に含まれていることを Assert します:

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

例えば、以下の JSON response があなたの application によって返される場合:

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

あなたは次のように、usernameプロパティが指定した value と一致することを主張することができます:

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

assertJsonMissingPath

与えられた path が response に含まれていないことを Assert します:

$response->assertJsonMissingPath($path);

たとえば、以下の JSON response があなたの application によって返された場合:

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

それがuseremailプロパティを含んでいないと主張することができます。

$response->assertJsonMissingPath('user.email');

assertJsonStructure

Assert が指定された JSON 構造を持つ response であることを主張します:

$response->assertJsonStructure(array $structure);

例えば、あなたの application が返す JSON response が以下の data を含んでいる場合:

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

あなたは次のように、 JSON 構造があなたの期待に一致すると assert することができます:

$response->assertJsonStructure([
    'user' => [
        'name',
    ]
]);

時折、あなたの application が返す JSON responses には、オブジェクトの配列が含まれているかもしれません:

{
  "user": [
    {
      "name": "Steve Schoger",
      "age": 55,
      "location": "Earth"
    },
    {
      "name": "Mary Schoger",
      "age": 60,
      "location": "Earth"
    }
  ]
}

この状況では、* 文字を使用して、 array の中のすべてのオブジェクトの構造に対して assert することができます:

$response->assertJsonStructure([
    'user' => [
        '*' => [
             'name',
             'age',
             'location'
        ]
    ]
]);

assertJsonValidationErrors

指定された keys に対して指定された JSON validation errors が response にあることを Assert します。この method は、 validation errors が session にフラッシュされる代わりに JSON 構造として返されるレスポンスに対して表明する場合に使用すぐたべます。

$response->assertJsonValidationErrors(array $data, $responseKey = 'errors');

NOTE

より一般的な assertInvalid method は、response が validation errors を JSON として返す または errors が session storage にフラッシュされたことを assert するために使用することができます。

assertJsonValidationErrorFor

指定したキーに対して、 response が JSON validation errors を含むことを Assert してください。

$response->assertJsonValidationErrorFor(string $key, $responseKey = 'errors');

assertMethodNotAllowed

Assert が response には許可されていない (405) HTTP status code の method があると主張します:

$response->assertMethodNotAllowed();

assertMovedPermanently

Assert は、 response が永続的に移動(301)した HTTP status code を持っていると述べています:

$response->assertMovedPermanently();

assertLocation

Locationという header が指定された URI の value を持っていることを Assert してください。

$response->assertLocation($uri);

assertContent

与えられた string が response content に一致すると Assert します:

$response->assertContent($value);

assertNoContent

Assert は、 response が指定された HTTP status code を持ち、 content がないことを主張します:

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

assertStreamedContent

与えられた string がストリーミングされた response content と一致することを Assert します:

$response->assertStreamedContent($value);

assertNotFound

Assert は、 response が見つからない(404)の HTTP status code を持っていると述べています:

$response->assertNotFound();

assertOk

Assert することで、 response が 200 の HTTP status code を持つことを確認します:

$response->assertOk();

assertPaymentRequired

Assert は、 response が支払いが required (402)の HTTP status code であることを主張します。

$response->assertPaymentRequired();

assertPlainCookie

与えられた暗号化されていない cookie を含む response を Assert する:

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

assertRedirect

指定された URI への redirect であると主張する response:

$response->assertRedirect($uri = null);

assertRedirectContains

与えられた string が含まれる URI に response がリダイレクトしているかどうかを Assert します:

$response->assertRedirectContains($string);

assertRedirectToRoute

指定されたnamed routeへの redirect として response が Assert されていることを確認します:

$response->assertRedirectToRoute($name, $parameters = []);

assertRedirectToSignedRoute

次の署名付きの routeへの redirect であると Assert する response を表明します。

$response->assertRedirectToSignedRoute($name = null, $parameters = []);

assertRequestTimeout

Assert は、 response が request timeout (408) の HTTP status code を持っていると主張:

$response->assertRequestTimeout();

assertSee

指定された string unless が response 内に含まれていることを Assert します。このアサーションは、第二引数にfalseを渡さない限り、指定された string を自動的にエスケープします。

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

assertSeeInOrder

与えられた strings が response 内に順序通りに含まれていることを Assert する。このアサーションは、あなたが第二引数にfalseを渡さない限り、自動的に与えられた strings をエスケープします。

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

assertSeeText

指定された string が response テキスト内に含まれていることを Assert します。この主張は、二番目の引数にfalseを渡さない限り、指定された string unless を自動的にエスケープします。 response content は、主張がなされる前にstrip_tags PHP 関数に渡されます。

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

assertSeeTextInOrder

指定された strings が response テキスト内に順序通りに含まれていることを Assert します。このアサーションは、第二引数にfalseを渡さない限り、指定された strings を自動的にエスケープします。アサーションが行われる前に、response content はstrip_tags PHP 関数に渡されます。

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

assertServerError

Assert により、 response がサーバーの error (>= 500、< 600)の HTTP status code を持つことを確認します:

$response->assertServerError();

assertServiceUnavailable

response が"Service Unavailable" (503)の"HTTP status コード"を持っていることを Assert してください:

$response->assertServiceUnavailable();

assertSessionHas

Assert が session に与えられた data の一部を含んでいることを主張します:

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

必要であれば、クロージャはassertSessionHas method の 2 番目の引数として提供できます。クロージャがtrueを返す場合、アサーションは通過します:

$response->assertSessionHas($key, function (User $value) {
    return $value->name === 'Taylor Otwell';
});

assertSessionHasInput

フラッシュされた input arrayにおいて、 session が特定の value を有することを Assert します:

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

必要であれば、クロージャはassertSessionHasInput method の第二引数として提供できます。クロージャがtrueを返す場合、アサーションはパスします:

use Illuminate\Support\Facades\Crypt;

$response->assertSessionHasInput($key, function (string $value) {
    return Crypt::decryptString($value) === 'secret';
});

assertSessionHasAll

指定された array のキー/ value ペアを含む session を Assert します:

$response->assertSessionHasAll(array $data);

例えば、あなたのアプリケーションの session がnamestatusの keys を含んでいる場合、次のように両方が存在し、指定した values を持っていることを assert することができます。

$response->assertSessionHasAll([
    'name' => 'Taylor Otwell',
    'status' => 'active',
]);

assertSessionHasErrors

$keysが指定する error が session に含まれていることを Assert します。 $keysが連想 array である場合、 session が各フィールド(キー)に対する特定の error メッセージ( value )を含むことを assert します。 validation errors を JSON 構造の代わりに session へフラッシュする testing routes をテストする際にこの method を使用する必要があります:

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

例えば、nameemailフィールドが session にフラッシュされた validation error メッセージを持っていることを assert するために、あなたは以下のようにassertSessionHasErrors method を呼び出すことができます:

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

または、特定のフィールドが特定の validation error メッセージを持つことを assert することもできます。

$response->assertSessionHasErrors([
    'name' => 'The given name was invalid.'
]);

NOTE

より一般的なassertInvalid method は、response が validation errors を JSON で返すか、errors が session storage にフラッシュされたことを assert するために使用することができます。

assertSessionHasErrorsIn

特定のerror bag内にある $keys について、 session が error を含んでいると Assert します。$keysが連想 array である場合、 session が、 error bag 内の各フィールド(キー)について特定の error メッセージ( value )を含んでいると assert します。

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

assertSessionHasNoErrors

Assert は、 session が validation errors を持っていないと主張します:

$response->assertSessionHasNoErrors();

assertSessionDoesntHaveErrors

指定された keys に対して、 session が validation errors を持っていないことを Assert します:

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

NOTE

より一般的なassertValid method は、response が validation errors を JSON として返さず、errors が session storage にフラッシュされないことを assert するために使用することができます。

assertSessionMissing

指定されたキーを session が含まないことを Assert します:

$response->assertSessionMissing($key);

assertStatus

Assert は、 response が特定の HTTP status code を持つことを主張します:

$response->assertStatus($code);

assertSuccessful

Assert が response が成功(>= 200 且つ < 300)の HTTP status code を持つことを主張します:

$response->assertSuccessful();

assertTooManyRequests

Assert を使って、response が多す数の requests(429)を伴った HTTP status コードであることを確認します:

$response->assertTooManyRequests();

assertUnauthorized

response が Unauthorized(401)の HTTP status コードであると Assert します:

$response->assertUnauthorized();

assertUnprocessable

Assert は、 response が処理不能なエンティティ(422)の HTTP status code を持っていることを主張します:

$response->assertUnprocessable();

assertUnsupportedMediaType

Assert を使用して、 response がサポートされていないメディア type (415)の HTTP status code であることを主張します:

$response->assertUnsupportedMediaType();

assertValid

Assert は、指定された keys に validation errors がない response を主張します。この method は、 validation errors が JSON 構造として返されるレスポンスや、 validation errors が session にフラッシュされた場合に使用することができます。

// Assert that no validation errors are present...
$response->assertValid();

// Assert that the given keys do not have validation errors...
$response->assertValid(['name', 'email']);

assertInvalid

Assert は、 response に keys に対する validation errors が含まれていることを指摘します。この method は、 validation errors が JSON 構造で返される応答または validation errors が session にフラッシュされた場合に対してアサートするために使用することができます:

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

特定のキーが特定の validation error メッセージを持っていることを assert することもできます。それを行うとき、メッセージ全体を提供するか、メッセージの一部だけを提供することができます:

$response->assertInvalid([
    'name' => 'The name field is required.',
    'email' => 'valid email address',
]);

assertViewHas

Assert は、 response view が特定の data を含むことを主張します:

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

assertViewHasの二番目の引数としてクロージャを渡すと、特定の viewdata を調査し、アサーションを行うことができます。

$response->assertViewHas('user', function (User $user) {
    return $user->name === 'Taylor';
});

また、 view data は、 response 上の array 変数としてアクセスでき、便利に検査できます:

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

assertViewHasAll

responseview が与えられた data のリストを持っていることを Assert します:

$response->assertViewHasAll(array $data);

この method は、与えられた keys に一致する単純な data を view が含んでいることを assert するために使用することができます:

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

または、あなたは assert を行い、 view data が存在し、特定の values を持っていると主張することができます:

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

assertViewIs

指定された view が route によって返されたと Assert します:

$response->assertViewIs($value);

assertViewMissing

指定した data キーがアプリケーションの response で返された view に利用できないことを Assert します:

$response->assertViewMissing($key);

Authentication アサーション

Laravel は、アプリケーションの feature テスト内で利用できる各種の authentication 関連のアサーションも提供しています。これらのメソッドはテストの class 自体で呼び出され、getpostのようなメソッドで返されるIlluminate\Testing\TestResponseインスタンスではないことに注意してください。

assertAuthenticated

user が authentication されていることを Assert します:

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

assertGuest

user が認証されていないことを Assert します:

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

assertAuthenticatedAs

特定の user が認証されていることを Assert します:

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

Validation Assertions

Laravel は、あなたの request で提供された data が有効または無効であったことを確認するために使用できる、2 つの主要な検証関連の主張を提供します。

assertValid

指定された keys に対して response に validation errors がないことを Assert します。この method は、 validation errors が JSON 構造として返されるレスポンスに対して断言するために使用されるか、または validation errors が session にフラッシュされている場合に使用されます。

// Assert that no validation errors are present...
$response->assertValid();

// Assert that the given keys do not have validation errors...
$response->assertValid(['name', 'email']);

assertInvalid

Assert という method を使って、与えられた keys に対する validation errors が response に含まれていることを主張します。この method は、validation errors が JSON 構造として返される response や、 validation errors が session にフラッシュされる場合に使用することができます:

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

ある特定のキーが特定の validation error メッセージを持つことを assert することもできます。その際、メッセージ全体を提供するか、メッセージの一部だけを提供することもできます。

$response->assertInvalid([
    'name' => 'The name field is required.',
    'email' => 'valid email address',
]);

当社サイトでは、Cookie を使用しています。各規約をご確認の上ご利用ください:
Cookie Policy, Privacy Policy および Terms of Use