メインコンテンツまでスキップ
バージョン: 8.x

HTTP テスト (HTTP Tests)

導入 (Introduction)

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

<?php

namespace Tests\Feature;

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

class ExampleTest extends TestCase
{
/**
* A basic test example.
*
* @return void
*/
public function test_a_basic_request()
{
$response = $this->get('/');

$response->assertStatus(200);
}
}

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

リクエストの作成 (Making Requests)

アプリケーションにリクエストを行うには、テスト内で getpostputpatch、または delete メソッドを呼び出すことができます。これらのメソッドは、実際にはアプリケーションに「実際の」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
{
/**
* A basic test example.
*
* @return void
*/
public function test_a_basic_request()
{
$response = $this->get('/');

$response->assertStatus(200);
}
}

一般に、各テストはアプリケーションに対して 1 つのリクエストのみを行う必要があります。単一のテスト メソッド内で複数のリクエストが実行されると、予期しない動作が発生する可能性があります。

{tip} 便宜上、テストの実行時には CSRF ミドルウェアが自動的に無効になります。

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

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

<?php

namespace Tests\Feature;

use Tests\TestCase;

class ExampleTest extends TestCase
{
/**
* A basic functional test example.
*
* @return void
*/
public function test_interacting_with_headers()
{
$response = $this->withHeaders([
'X-Header' => 'Value',
])->post('/user', ['name' => 'Sally']);

$response->assertStatus(201);
}
}

クッキー

リクエストを行う前に、withCookie メソッドまたは withCookies メソッドを使用して Cookie 値を設定できます。 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, 'web')

デバッグ応答

アプリケーションにテスト要求を行った後、dumpdumpHeaders、および dumpSession メソッドを使用して、応答の内容を調べてデバッグできます。

<?php

namespace Tests\Feature;

use Tests\TestCase;

class ExampleTest extends TestCase
{
/**
* A basic test example.
*
* @return void
*/
public function test_basic_test()
{
$response = $this->get('/');

$response->dumpHeaders();

$response->dumpSession();

$response->dump();
}
}

あるいは、ddddHeaders、および ddSession メソッドを使用して、応答に関する情報をダンプしてから実行を停止することもできます。

<?php

namespace Tests\Feature;

use Tests\TestCase;

class ExampleTest extends TestCase
{
/**
* A basic test example.
*
* @return void
*/
public function test_basic_test()
{
$response = $this->get('/');

$response->ddHeaders();

$response->ddSession();

$response->dd();
}
}

例外処理

場合によっては、アプリケーションが特定の例外をスローしているかどうかをテストしたい場合があります。例外が Laravel の例外ハンドラーによって捕捉され、HTTP 応答として返されないようにするには、リクエストを行う前に withoutExceptionHandling メソッドを呼び出すことができます。

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

さらに、アプリケーションが PHP 言語またはアプリケーションが使用しているライブラリによって非推奨になった機能を利用していないことを確認したい場合は、リクエストを行う前に withoutDeprecationHandling メソッドを呼び出すことができます。非推奨の処理が無効になっていると、非推奨の警告が例外に変換されるため、テストが失敗します。

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

JSON APIのテスト (Testing JSON APIs)

Laravel は、JSON API とその応答をテストするためのいくつかのヘルパも提供します。たとえば、jsongetJsonpostJsonputJsonpatchJsondeleteJson、および optionsJson メソッドを使用して、さまざまな HTTP 動詞を含む JSON リクエストを発行できます。これらのメソッドにデータとヘッダーを簡単に渡すこともできます。まず、POST リクエストを /api/user に送信し、予期した JSON データが返されたことをアサートするテストを作成しましょう。

<?php

namespace Tests\Feature;

use Tests\TestCase;

class ExampleTest extends TestCase
{
/**
* A basic functional test example.
*
* @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
{
/**
* A basic functional test example.
*
* @return void
*/
public function test_asserting_an_exact_json_match()
{
$response = $this->postJson('/user', ['name' => 'Sally']);

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

JSON パスでのアサート

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

<?php

namespace Tests\Feature;

use Tests\TestCase;

class ExampleTest extends TestCase
{
/**
* A basic functional test example.
*
* @return void
*/
public function test_asserting_a_json_paths_value()
{
$response = $this->postJson('/user', ['name' => 'Sally']);

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

流暢な JSON テスト

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

use Illuminate\Testing\Fluent\AssertableJson;

/**
* A basic functional test example.
*
* @return void
*/
public function test_fluent_json()
{
$response = $this->getJson('/users/1');

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

etc メソッドについて

上の例では、アサーション チェーンの最後で etc メソッドを呼び出していることに気づいたかもしれません。このメソッドは、JSON オブジェクトに他の属性が存在する可能性があることを Laravel に通知します。 etc メソッドが使用されていない場合、アサーションを行っていない他の属性が JSON オブジェクトに存在するとテストは失敗します。

この動作の背後にある目的は、属性に対して明示的にアサーションを行うか、etc メソッドを介して追加の属性を明示的に許可することを強制することで、JSON 応答内の機密情報が意図せず公開されるのを防ぐことです。

属性の有無のアサート

属性が存在するか存在しないかをアサートするには、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 メソッドを使用して、指定された属性リストの少なくとも 1 つが存在するかどうかを確認できます。

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

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

ただし、users コレクションに対してアサートするために has メソッドを 2 回別々に呼び出す代わりに、3 番目のパラメーターとしてクロージャを提供する 1 回の呼び出しを行うことができます。これを行うと、クロージャーが自動的に呼び出され、コレクション内の最初の項目にスコープが設定されます。

$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 クラスは、まさにそれを行うための whereType メソッドと whereAllType メソッドを提供します。

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

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

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

whereType メソッドと whereAllType メソッドは、stringintegerdoublebooleanarray、および null のタイプを認識します。

ファイルのアップロードのテスト (Testing File Uploads)

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

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

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

ビューのテスト (Testing Views)

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 クラスは、assertSeeassertSeeInOrderassertSeeTextassertSeeTextInOrderassertDontSee、および assertDontSeeText のアサーション メソッドを提供します。

必要に応じて、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 メソッドを使用して、Blade コンポーネント を評価およびレンダリングできます。 view メソッドと同様に、component メソッドは Illuminate\Testing\TestView のインスタンスを返します。

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

$view->assertSee('Taylor');

利用可能なアサーション (Available Assertions)

応答アサーション

Laravel の Illuminate\Testing\TestResponse クラスは、アプリケーションのテスト時に利用できるさまざまなカスタム アサーション メソッドを提供します。これらのアサーションは、jsongetpostput、および delete テスト メソッドによって返される応答でアクセスできます。

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

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

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

$response->assertCookieExpired($cookieName);

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

$response->assertCookieNotExpired($cookieName);

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

$response->assertCookieMissing($cookieName);

アサート作成されました

応答に 201 HTTP ステータス コードがあることをアサートします。

$response->assertCreated();

主張しないでください

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

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

アサートDontSeeText

指定された文字列が応答テキストに含まれていないことをアサートします。このアサーションは、false の 2 番目の引数を渡さない限り、指定された文字列を自動的にエスケープします。このメソッドは、アサーションを行う前に、応答コンテンツを strip_tags PHP 関数に渡します。

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

アサートダウンロード

応答が「ダウンロード」であることをアサートします。通常、これは、応答を返した呼び出されたルートが Response::download 応答、BinaryFileResponse、または Storage::download 応答を返したことを意味します。

$response->assertDownload();

必要に応じて、ダウンロード可能なファイルに特定のファイル名が割り当てられていることを主張できます。

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

アサートExactJson

応答に指定された JSON データと完全に一致するものが含まれていることをアサートします。

$response->assertExactJson(array $data);

アサート禁止

応答に禁止された (403) HTTP ステータス コードがあることをアサートします。

$response->assertForbidden();

アサートヘッダー

指定されたヘッダーと値が応答に存在することをアサートします。

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

アサートヘッダーがありません

指定されたヘッダーが応答に存在しないことをアサートします。

$response->assertHeaderMissing($headerName);

アサートJson

応答に指定された JSON データが含まれていることをアサートします。

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

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

アサートJsonCount

応答 JSON に、指定されたキーで予想される数の項目を含む配列があることをアサートします。

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

アサートJsonFragment

応答の任意の場所に指定された JSON データが含まれていることをアサートします。

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

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

アサートJsonMissing

応答に指定された JSON データが含まれていないことをアサートします。

$response->assertJsonMissing(array $data);

assertJsonMissingExact

応答に正確な JSON データが含まれていないことをアサートします。

$response->assertJsonMissingExact(array $data);

assertJsonMissingValidationErrors

指定されたキーに対する応答に JSON 検証エラーがないことをアサートします。

$response->assertJsonMissingValidationErrors($keys);

{tip} より一般的な assertValid メソッドは、応答に JSON として返された検証エラーがないこと、および セッション ストレージにフラッシュされたエラーがないことをアサートするために使用できます。

アサートJsonPath

応答に指定されたパスにある指定されたデータが含まれていることをアサートします。

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

たとえば、アプリケーションから返された JSON 応答に次のデータが含まれているとします。

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

次のように、user オブジェクトの name プロパティが指定された値と一致すると主張できます。

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

アサートJson構造

応答が指定された 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'
]
]
]);

アサートJsonValidationErrors

応答に指定されたキーに対して指定された JSON 検証エラーがあることをアサートします。このメソッドは、検証エラーがセッションにフラッシュされるのではなく JSON 構造として返される応答に対してアサートするときに使用する必要があります。

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

{tip} より一般的な assertInvalid メソッドを使用すると、応答に検証エラーが JSON として返されたことを主張する ** または ** エラーがセッション ストレージにフラッシュされたことを主張できます。

assertJsonValidationErrorFor

応答に指定されたキーの JSON 検証エラーがあることをアサートします。

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

アサート場所

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

$response->assertLocation($uri);

アサートNoContent

応答に指定された HTTP ステータス コードがあり、内容が含まれていないことをアサートします。

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

アサートが見つかりませんでした

応答に not found (404) HTTP ステータス コードがあることをアサートします。

$response->assertNotFound();

アサートOK

応答に 200 HTTP ステータス コードがあることをアサートします。

$response->assertOk();

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

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

アサートリダイレクト

応答が指定された URI へのリダイレクトであることをアサートします。

$response->assertRedirect($uri);

assertRedirectContains

応答が指定された文字列を含む URI にリダイレクトされているかどうかを確認します。

$response->assertRedirectContains($string);

assertRedirectToSignedRoute

応答が指定された署名付きルートへのリダイレクトであることをアサートします。

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

アサートを参照

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

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

アサートSeeInOrder

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

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

アサート参照テキスト

指定された文字列が応答テキストに含まれていることをアサートします。このアサーションは、false の 2 番目の引数を渡さない限り、指定された文字列を自動的にエスケープします。応答コンテンツは、アサーションが行われる前に strip_tags PHP 関数に渡されます。

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

アサートSeeTextInOrder

指定された文字列が応答テキスト内に順番に含まれていることを確認します。このアサーションは、false の 2 番目の引数を渡さない限り、指定された文字列を自動的にエスケープします。応答コンテンツは、アサーションが行われる前に strip_tags PHP 関数に渡されます。

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

アサートセッションが持っています

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

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

必要に応じて、assertSessionHas メソッドの 2 番目の引数としてクロージャーを提供できます。クロージャが true を返す場合、アサーションは合格します。

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

assertSessionHasInput

セッションの フラッシュ入力アレイ に指定された値があることをアサートします。

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

必要に応じて、assertSessionHasInput メソッドの 2 番目の引数としてクロージャーを提供できます。クロージャが true を返す場合、アサーションは合格します。

$response->assertSessionHasInput($key, function ($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.'
]);

アサートセッションにエラーが発生しました

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

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

assertSessionHasNoErrors

セッションに検証エラーがないことをアサートします。

$response->assertSessionHasNoErrors();

assertSessionDoesntHaveErrors

セッションに指定されたキーの検証エラーがないことをアサートします。

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

アサートセッションが見つかりません

セッションに指定されたキーが含まれていないことをアサートします。

$response->assertSessionMissing($key);

アサートステータス

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

$response->assertStatus($code);

アサート成功

応答に成功 (>= 200 および < 300) HTTP ステータス コードがあることをアサートします。

$response->assertSuccessful();

アサート未承認

応答に未承認 (401) HTTP ステータス コードがあることをアサートします。

$response->assertUnauthorized();

アサート処理不能

応答に処理できないエンティティ (422) HTTP ステータス コードがあることをアサートします。

$response->assertUnprocessable();

アサート有効

応答に指定されたキーの検証エラーがないことをアサートします。このメソッドは、検証エラーが JSON 構造として返される場合、または検証エラーがセッションにフラッシュされた場合の応答に対するアサートに使用できます。

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

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

アサート無効

応答に指定されたキーの検証エラーがあることをアサートします。このメソッドは、検証エラーが JSON 構造として返される場合、または検証エラーがセッションにフラッシュされた場合の応答に対するアサートに使用できます。

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

特定のキーに特定の検証エラー メッセージがあると主張することもできます。その際、メッセージ全体を提供することも、メッセージの一部だけを提供することもできます。

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

アサートビューがあります

応答ビューに指定されたデータが含まれていることをアサートします。

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

assertViewHas メソッドの 2 番目の引数としてクロージャを渡すと、ビュー データの特定の部分を検査してアサーションを行うことができます。

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

さらに、ビュー データは応答の配列変数としてアクセスできるため、簡単に検査できます。

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

アサートビューにはすべてがあります

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

$response->assertViewHasAll(array $data);

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

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

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

$response->assertViewHasAll([
'name' => 'Taylor Otwell',
'email' => '[email protected],',
]);

アサートビューIs

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

$response->assertViewIs($value);

アサートビューがありません

指定されたデータ キーがアプリケーションの応答で返されたビューで使用可能になっていないことをアサートします。

$response->assertViewMissing($key);

認証アサーション

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

認証済み

ユーザーが認証されていることをアサートします。

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

アサートゲスト

ユーザーが認証されていないことをアサートします。

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

認証済みとしてアサート

特定のユーザーが認証されていることをアサートします。

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