HTTP 테스트
시작하기
라라벨은 애플리케이션에 HTTP 요청-request을 하고, 응답-response을 검사하는데 사용할 수 있는, 유연한 API를 제공합니다. 다음에 정의된 기능-feature 테스트 예제를 살펴보겠습니다.
<?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
request-요청을 만들고, assertStatus
메소드는 반환된 response-응답이 주어진 HTTP 상태 코드와 일치하는지 확인합니다. 간단한 테스트에 더해, 라라벨은 response의 헤더값, 컨텐츠, JSON 구조 및 기타 확인을 할 수 있는 기능을 제공합니다.
Request 만들기
애플리케이션에 요청하려면 테스트 내에서 'get',
post
, put
, patch
또는 delete
메서드를 호출할 수 있습니다. 이러한 메소드는 실제로 애플리케이션에 "실제" HTTP 요청을 발행시키지는 않습니다. 대신 전체 네트워크 요청이 내부적으로 시뮬레이션됩니다.
테스트 요청 메소드는 Illuminate\Http\Response
인스턴스를 반환하는 대신, 애플리케이션 응답-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);
}
}
일반적으로 각 테스트는 애플리케이션에 한 번만 요청해야 합니다. 단일 테스트 메서드 내에서 여러 요청이 실행되는 경우 예기치 않은 동작이 발생할 수 있습니다.
{tip} 편의를 위해 CSRF 미들웨어는 테스트를 실행할 때 자동으로 비활성화됩니다.
요청-Request 헤더 커스터마이징하기
withHeaders
메소드를 사용하여 요청-requestr가 애플리케이션에 전달되기 전에 헤더를 커스터마이징 할 수 있습니다. 이 메서드를 통해 요청-request에 커스텀 헤더를 추가 할 수 있습니다.
<?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
메소드를 사용하여 요청하기 전에 쿠키 값을 설정할 수 있습니다. withCookie
메소드는 쿠키 이름과 값을 두 개의 인수로 받아들이고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('/');
}
}
세션 / 인증
라라벨은 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('/');
}
}
라라벨의 세션은 일반적으로 현재 인증된 사용자의 상태를 유지하는 데 사용됩니다. 따라서 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
메소드의 두 번째 인수로 전달하여, 주어진 사용자를 인증하는 데 사용할 가드를 지정할 수도 있습니다.
$this->actingAs($user, 'web')
응답 디버깅
애플리케이션에 테스트 요청을 한 후에는 dump
, dumpHeaders
및 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();
}
}
또는 dd
, ddHeaders
및 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();
}
}
에러 핸들링
때로는 애플리케이션에서 특정 예외가 발생하는지 테스트하고 싶을 수 있습니다. 예외가 라라벨의 예외 핸들러에 의해 포착되어 HTTP 응답으로 반환되지 않도록 하려면 요청하기 전에 withoutExceptionHandling
메소드를 호출할 수 있습니다.
$response = $this->withoutExceptionHandling()->get('/');
또한 애플리케이션이 PHP 언어 또는 애플리케이션에서 사용 중인 라이브러리에서 더 이상 사용되지 않는 기능을 사용하지 않도록 하려면 요청하기 전에 withoutDeprecationHandling
메서드를 호출할 수 있습니다. 지원 중단 처리가 비활성화되면 지원 중단 경고가 예외로 변환되어 테스트가 실패하게 됩니다.
$response = $this->withoutDeprecationHandling()->get('/');
JSON API 테스팅하기
라라벨은 또한 JSON API 및 해당 응답을 테스트하기 위한 여러 헬퍼를 제공합니다. 예를 들어 json
, getJson
, postJson
, putJson
, patchJson
, deleteJson
및 optionsJson
메소드는 다양한 HTTP 동사로 JSON 요청을 발행하는 데 사용할 수 있습니다. 또한 이러한 메서드에 데이터와 헤더를 쉽게 전달할 수도 있습니다. 시작하기 위해 /api/user
에 대한 POST
요청을 작성하고 예상 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 Path 검증
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 테스트
라라벨은 또한 애플리케이션의 JSON 응답을 유연하게 테스트하는 아름다운 방법을 제공합니다. 시작하려면 assertJson
메서드에 클로저를 전달하세요. 이 클로저는 Illuminate\Testing\Fluent\AssertableJson
인스턴스와 함께 호출되며 애플리케이션에서 반환된 JSON에 대해 검증을 만드는 데 사용할 수 있습니다. 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 객체에 다른 속성이 있을 수 있음을 라라벨에 알려줍니다. 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
메소드를 사용하여 주어진 속성 목록 중 적어도 하나가 존재하는지 확인할 수 있습니다.
$response->assertJson(fn (AssertableJson $json) =>
$json->has('status')
->hasAny('data', 'message', 'code')
);
JSON 컬렉션에 대한 검증
때로는 여러명의 사용자와 같이, 여러개의 항목을 가진 JSON 응답을 반환합니다.
Route::get('/users', function () {
return User::all();
});
이러한 상황에서 우리는 유창한 JSON 객체의 has
메소드를 사용하여 응답에 포함된 사용자에 대해 검증을 할 수 있습니다. 예를 들어 JSON 응답에 세 명의 사용자가 포함되어 있다고 가정해 보겠습니다. 다음으로 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
메소드에 대한 두 개의 개별 호출을 수행하는 대신, 세 번째 매개변수로 클로저를 제공하는 단일 호출을 수행할 수 있습니다. 그렇게 하면 클로저가 자동으로 호출되고 컬렉션의 첫 번째 항목으로 범위가 지정됩니다.
$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 Type 검증
JSON 응답의 속성이 특정 유형인지만 검증 할 수도 있습니다. Illuminate\Testing\Fluent\AssertableJson
클래스는 이를 수행하기 위한 whereType
및 whereAllType
메서드를 제공합니다.
$response->assertJson(fn (AssertableJson $json) =>
$json->whereType('id', 'integer')
->whereAllType([
'users.0.name' => 'string',
'meta' => 'array'
])
);
|
문자를 사용하여 여러 유형을 지정하거나 whereType
메소드의 두 번째 매개변수로 유형 배열을 전달할 수 있습니다. 응답 값이 나열된 유형 중 하나이면 검증이 성공합니다.
$response->assertJson(fn (AssertableJson $json) =>
$json->whereType('name', 'string|null')
->whereType('id', ['string', 'integer'])
);
whereType
및 whereAllType
메소드는 string
, integer
, double
, boolean
, array
및 null
유형을 인식합니다.
파일 업로드 테스트하기
Illuminate\Http\UploadedFile
클래스는 테스트를 위해 더미 파일이나 이미지를 생성하는 데 사용할 수 있는 fake
메서드를 제공합니다. 이것은 Storage
파사드의 fake
방법과 결합되어 파일 업로드 테스트를 크게 단순화합니다. 예를 들어 다음 두 기능을 결합하여 아바타 업로드 양식을 쉽게 테스트할 수 있습니다.
<?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
메소드를 사용하여 파일을 생성할 때, 애플리케이션의 유효성 검사 규칙을 더 잘 테스트하기 위해 이미지의 너비, 높이 및 크기(KB)를 지정할 수 있습니다.
UploadedFile::fake()->image('avatar.jpg', $width, $height)->size(100);
이미지 타입 뿐만 아니라 create
메소드를 사용하여 다른 타입들의 파일도 생성할 수 있습니다.
UploadedFile::fake()->create('document.pdf', $sizeInKilobytes);
필요한 경우, 파일에 의해 반환되어야하는 MIME 유형을 명시적으로 정의하기 위해 메소드에 $mimeType
인수를 전달할 수 있습니다.
UploadedFile::fake()->create(
'document.pdf', $sizeInKilobytes, 'application/pdf'
);
뷰 테스트하기
라라벨을 사용하면 애플리케이션에 시뮬레이션된 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
클래스는 assertSee
, assertSeeInOrder
, assertSeeText
, assertSeeTextInOrder
, assertDontSee
및 assertDontSeeText
와 같은 검증 메소드를 제공합니다.
필요하다면 TestView
인스턴스를 문자열로 캐스팅하여 렌더링 된 뷰의 원문을 가져올 수 있습니다.
$contents = (string) $this->view('welcome');
에러 공유하기
일부 보기는 라라벨이 제공하는 전역 오류 bag에서 공유되는 오류에 따라 달라질 수 있습니다. 오류 메시지가 있는 오류 백을 가져오려면 withViewErrors
메서드를 사용할 수 있습니다.
$view = $this->withViewErrors([
'name' => ['Please provide a valid name.']
])->view('form');
$view->assertSee('Please provide a valid name.');
블레이드 및 컴포넌트 렌더링
필요한 경우 blade
메서드를 사용하여 원시 Blade 문자열을 평가하고 렌더링할 수 있습니다. view
메소드와 마찬가지로 blade
메소드는 Illuminate\Testing\TestView
의 인스턴스를 반환합니다.
$view = $this->blade(
'<x-component :name="$name" />',
['name' => 'Taylor']
);
$view->assertSee('Taylor');
component
메소드를 사용하여 Blade component를 평가하고 렌더링할 수 있습니다. view
메소드와 마찬가지로 component
메소드는 Illuminate\Testing\TestView
의 인스턴스를 반환합니다.
$view = $this->component(Profile::class, ['name' => 'Taylor']);
$view->assertSee('Taylor');
사용 가능한 Assertions
응답-response Assertions
라라벨의 Illuminate\Testing\TestResponse
클래스는 애플리케이션을 테스트할 때 활용할 수 있는 다양한 커스텀 검증 메소드를 제공합니다. 이러한 검증은 json
, get
, post
, put
및 delete
테스트 메서드에서 반환된 응답에서 액세스할 수 있습니다.
- assertCookie
- assertCookieExpired
- assertCookieNotExpired
- assertCookieMissing
- assertCreated
- assertDontSee
- assertDontSeeText
- assertDownload
- assertExactJson
- assertForbidden
- assertHeader
- assertHeaderMissing
- assertJson
- assertJsonCount
- assertJsonFragment
- assertJsonMissing
- assertJsonMissingExact
- assertJsonMissingValidationErrors
- assertJsonPath
- assertJsonStructure
- assertJsonValidationErrors
- assertJsonValidationErrorFor
- assertLocation
- assertNoContent
- assertNotFound
- assertOk
- assertPlainCookie
- assertRedirect
- assertRedirectContains
- assertRedirectToSignedRoute
- assertSee
- assertSeeInOrder
- assertSeeText
- assertSeeTextInOrder
- assertSessionHas
- assertSessionHasInput
- assertSessionHasAll
- assertSessionHasErrors
- assertSessionHasErrorsIn
- assertSessionHasNoErrors
- assertSessionDoesntHaveErrors
- assertSessionMissing
- assertSimilarJson
- assertStatus
- assertSuccessful
- assertUnauthorized
- assertUnprocessable
- assertValid
- assertInvalid
- assertViewHas
- assertViewHasAll
- assertViewIs
- assertViewMissing
assertCookie
response-응답에서 주어진 쿠키가 포함되어 있는지 확인:
$response->assertCookie($cookieName, $value = null);
assertCookieExpired
response-응답에서 주어진 쿠키가 기간이 만료되었는지 확인:
$response->assertCookieExpired($cookieName);
assertCookieNotExpired
response-응답에서 주어진 쿠키가 기간이 만료되지 않은 것을 확인:
$response->assertCookieNotExpired($cookieName);
assertCookieMissing
response-응답에서 주어진 쿠키를 포함하고 있지 않은 것을 확인:
$response->assertCookieMissing($cookieName);
assertCreated
response-응답에 201 HTTP 상태 코드가 있는 지 확인:
$response->assertCreated();
assertDontSee
애플리케이션에서 돌아온 response-응답에 주어진 문자열이 포함되어 있지 않은 것을 확인. 이 테스트는 두번째 인자값으로 false
를 지정하지 않는 한, 자동으로 주어진 문자열을 노출시킵니다.
$response->assertDontSee($value, $escaped = true);
assertDontSeeText
response-응답 텍스트에 주어진 문자열이 포함되어 있지 않은 것을 확인. 이 테스트는 두번째 인자값으로 false
를 지정하지 않는 한, 자동으로 주어진 문자열을 노출시킵니다. 이 메소드는 검증을 하기 전에 strip_tags
PHP 함수에 응답 내용을 전달할 것입니다.
$response->assertDontSeeText($value, $escaped = true);
assertDownload
응답이 "다운로드"임을 확인합니다. 일반적으로 이는 응답을 반환한 호출된 경로가 Response::download
응답, BinaryFileResponse
또는 Storage::download
응답을 반환했음을 의미합니다.
$response->assertDownload();
원하는 경우 다운로드 가능한 파일에 지정한 파일 이름이 할당되었는지 검증할 수 있습니다.
$response->assertDownload('image.jpg');
assertExactJson
response-응답에 주어진 JSON 데이터가 정확하게 일치하게 포함되어 있는지 확인:
$response->assertExactJson(array $data);
assertForbidden
response-응답이 forbidden(403) HTTP 상태코드를 가지고 있는지 확인:
$response->assertForbidden();
assertHeader
response-응답에서 주어진 헤더와 값이 존재하는지 확인:
$response->assertHeader($headerName, $value = null);
assertHeaderMissing
response-응답에서 주어진 헤더가 존재하는 않는 것을 확인:
$response->assertHeaderMissing($headerName);
assertJson
response-응답에 주어진 JSON 데이터가 포함되어 있는지 확인:
$response->assertJson(array $data, $strict = false);
assertJson
메소드는 응답을 배열로 변환하고 PHPUnit::assertArraySubset
을 사용하여 애플리케이션에서 반환된 JSON 응답 내에 주어진 배열이 존재하는지 확인합니다. 따라서 JSON 응답에 다른 속성이 있는 경우 이 테스트는 주어진 조각이 있는 한 계속 통과합니다.
assertJsonCount
response-응답 JSON 에 주어진 키에 해당되는 아이템 숫자의 배열을 가지고 있는지 확인:
$response->assertJsonCount($count, $key = null);
assertJsonFragment
응답에 지정된 JSON 데이터가 응답의 어딘가에 포함되어 있는지 확인:
Route::get('/users', function () {
return [
'users' => [
[
'name' => 'Taylor Otwell',
],
],
];
});
$response->assertJsonFragment(['name' => 'Taylor Otwell']);
assertJsonMissing
response-응답에 주어진 JSON 데이터가 포함되어 있지 않은 것을 확인:
$response->assertJsonMissing(array $data);
assertJsonMissingExact
response-응답에 주어진 JSON 데이터가 정확하게 포함되어 있지 않은 것을 확인:
$response->assertJsonMissingExact(array $data);
assertJsonMissingValidationErrors
response-응답에 주어진키에 대한 JSON 유효성 검사 에러가 포함되어 있지 않은 것을 확인:
$response->assertJsonMissingValidationErrors($keys);
{tip} 보다 일반적인 assertValid 메서드를 사용하여 응답에 JSON 으로 반환된 유효성 검사 오류가 없고 세션 저장소에 오류가 표시되지 않았다고 검증할 수 있습니다.
assertJsonPath
response-응답에 지정된 경로와 지정된 데이터가 포함되어 있는지 확인:
$response->assertJsonPath($path, $expectedValue);
예를 들어 애플리케이션에서 반환된 JSON 응답에 다음 데이터가 포함된 경우
{
"user": {
"name": "Steve Schoger"
}
}
user
객체의 name
속성이 다음과 같이 주어진 값과 일치한다고 검증할 수 있습니다.
$response->assertJsonPath('user.name', 'Steve Schoger');
assertJsonStructure
response-응답에 지정된 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, $responseKey = 'errors');
{tip} 보다 일반적인 assertInvalid 메서드를 사용하여 응답에 유효성 검사 오류가 JSON으로 반환된 또는 오류가 세션 저장소로 플래시되었음을 확인할 수 있습니다.
assertJsonValidationErrorFor
응답에 지정된 키에 대한 JSON 유효성 검사 오류가 있는지 검증:
$response->assertJsonValidationErrorFor(string $key, $responseKey = 'errors');
assertLocation
response-응답의 Location
헤더에 주어진 URI를 가지고 있는지 확인:
$response->assertLocation($uri);
assertNoContent
response-응답에 주어진 HTTP 상태 코드가 있고 내용이 없는지 확인:
$response->assertNoContent($status = 204);
assertNotFound
response-응답이 not found (404) HTTP 상태코드를 가지고 있는지 확인:
$response->assertNotFound();
assertOk
response-응답이 200 HTTP 상태 코드를 가지고 있는지 확인:
$response->assertOk();
assertPlainCookie
response-응답에서 암호화 되지 않은 주어진 쿠키가 포함되어 있는지 확인:
$response->assertPlainCookie($cookieName, $value = null);
assertRedirect
response-응답이 주어진 URI로 리다이렉트되는지 여부를 확인:
$response->assertRedirect($uri);
assertRedirectContains
응답이 주어진 문자열을 포함하는 URI로 리디렉션되는지 여부를 확인:
$response->assertRedirectContains($string);
assertRedirectToSignedRoute
응답이 지정된 서명된 경로로의 리디렉션임을 확인:
$response->assertRedirectToSignedRoute($name = null, $parameters = []);
assertSee
response-응답이 주어진 문자열을 포함하고 있는지 확인. 이 테스트는 두번째 인자값으로 false
를 지정하지 않는 한, 자동으로 주어진 문자열을 노출시킵니다.
$response->assertSee($value, $escaped = true);
assertSeeInOrder
response-응답이 주어진 문자열 배열을 순서대로 포함하고 있는지 확인. 이 테스트는 두번째 인자값으로 false
를 지정하지 않는 한, 자동으로 주어진 문자열들을 노출시킵니다.
$response->assertSeeInOrder(array $values, $escaped = true);
assertSeeText
response-응답 텍스트가 주어진 문자열을 포함하고 있는지 확인. 이 테스트는 두번째 인자값으로 false
를 지정하지 않는 한, 자동으로 주어진 문자열을 노출시킵니다. 응답 내용은 검증이 이루어지기 전에 strip_tags
PHP 함수로 전달됩니다.
$response->assertSeeText($value, $escaped = true);
assertSeeTextInOrder
response-응답 텍스트가 주어진 문자열 배열을 순서대로 포함하고 있는지 확인. 이 테스트는 두번째 인자값으로 false
를 지정하지 않는 한, 자동으로 주어진 문자열들을 노출시킵니다. 응답 내용은 검증이 이루어지기 전에 strip_tags
PHP 함수로 전달됩니다.
$response->assertSeeTextInOrder(array $values, $escaped = true);
assertSessionHas
세션에 주어진 데이터가 포함되어 있는지 확인:
$response->assertSessionHas($key, $value = null);
필요한 경우 클로저를 assertSessionHas
메소드에 대한 두 번째 인수로 전달할 수 있습니다. 클로저가 true
를 반환하면 검증이 전달됩니다.
$response->assertSessionHas($key, function ($value) {
return $value->name === 'Taylor Otwell';
});
assertSessionHasInput
세션에 임시저장(flashed) 된 입력 배열에 주어진 값이 있는지 확인:
$response->assertSessionHasInput($key, $value = null);
필요한 경우 클로저를 assertSessionHasInput
메소드에 대한 두 번째 인수로 제공할 수 있습니다. 클로저가 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.'
]);
assertSessionHasErrorsIn
세션에 특정 error bag 내에서 주어진 $keys
에 대한 오류가 포함되어 있는지 확인합니다. $keys
가 연관 배열인 경우 세션에 오류 백 내에서 각 필드(키)에 대한 특정 오류 메시지(값)가 포함되어 있는지 검증합니다.
$response->assertSessionHasErrorsIn($errorBag, $keys = [], $format = null);
assertSessionHasNoErrors
세션에 유효성 검사 오류가 없는지 확인:
$response->assertSessionHasNoErrors();
assertSessionDoesntHaveErrors
세션에 주어진 키에 대한 유효성 검사 오류가 없음을 확인:
$response->assertSessionDoesntHaveErrors($keys = [], $format = null, $errorBag = 'default');
assertSessionMissing
세션에 주어진 키가 포함되어 있지 않은 것을 확인:
$response->assertSessionMissing($key);
assertStatus
response-응답이 주어진 HTTP 상태코드를 가지고 있는지 확인:
$response->assertStatus($code);
assertSuccessful
response-응답이 성공적인(>= 200 and < 300) HTTP 상태코드를 가지고 있는지 확인:
$response->assertSuccessful();
assertUnauthorized
response-응답이 unauthorized(401) HTTP 상태코드를 가지고 있는지 확인:
$response->assertUnauthorized();
assertUnprocessable
response-응답이 unprocessable(422) HTTP 상태코드를 가지고 있는지 확인:
$response->assertUnprocessable();
assertValid
응답에 주어진 키에 대한 유효성 검사 오류가 없는지 확인합니다. 이 메서드는 유효성 검사 오류가 JSON 구조로 반환되거나 유효성 검사 오류가 세션에 플래시된 응답에 대해 검증하는 데 사용할 수 있습니다.
// Assert that no validation errors are present...
$response->assertValid();
// Assert that the given keys do not have validation errors...
$response->assertValid(['name', 'email']);
assertInvalid
응답에 주어진 키에 대한 유효성 검사 오류가 있는지 확인합니다. 이 메서드는 유효성 검사 오류가 JSON 구조로 반환되거나 유효성 검사 오류가 세션에 플래시된 응답에 대해 검증하는 데 사용할 수 있습니다.
$response->assertInvalid(['name', 'email']);
주어진 키에 특정 유효성 검사 오류 메시지가 있는지 검증할 수도 있습니다. 그렇게 할 때 전체 메시지를 제공하거나 메시지의 일부만 제공할 수 있습니다.
$response->assertInvalid([
'name' => 'The name field is required.',
'email' => 'valid email address',
]);
assertViewHas
응답-response 뷰에 주어진 데이터 조각이 포함되어 있는지 확인:
$response->assertViewHas($key, $value = null);
클로저를 assertViewHas
메소드에 대한 두 번째 인수로 전달하면, 특정 뷰 데이터 조각을 검사하고 검증할 수 있습니다.
$response->assertViewHas('user', function (User $user) {
return $user->name === 'Taylor';
});
또한 뷰 데이터는 응답의 배열 변수로 액세스할 수 있으므로 편리하게 검사할 수 있습니다.
$this->assertEquals('Taylor', $response['name']);
assertViewHasAll
response-응답 뷰에서 주어진 데이터 리스트를 가지고 있는지 확인:
$response->assertViewHasAll(array $data);
이 메서드는 뷰가 단순히 주어진 키와 일치하는 데이터를 포함하는지 검증하는 데 사용할 수 있습니다.
$response->assertViewHasAll([
'name',
'email',
]);
또는 뷰 데이터가 있고 특정 값이 있는지 검증할 수 있습니다.
$response->assertViewHasAll([
'name' => 'Taylor Otwell',
'email' => '[email protected],',
]);
assertViewIs
라우터에 의해서 주어진 뷰가 반환되었는지 확인:
$response->assertViewIs($value);
assertViewMissing
애플리케이션의 응답에서 반환된 뷰에서 주어진 데이터 키를 사용할 수 없음을 확인:
$response->assertViewMissing($key);
Authentication Assertions
라라벨은 또한 애플리케이션의 기능 테스트 내에서 활용할 수 있는 다양한 인증 관련 검증을 제공합니다. 이러한 메소드는 get
및 post
와 같은 메소드에서 반환된 Illuminate\Testing\TestResponse
인스턴스가 아니라 테스트 클래스 자체에서 호출됩니다.
assertAuthenticated
사용자가 인증되었는지 확인:
$this->assertAuthenticated($guard = null);
assertGuest
사용자가 인증되지 않았는지 확인:
$this->assertGuest($guard = null);
assertAuthenticatedAs
특정 사용자가 인증되었는지 확인:
$this->assertAuthenticatedAs($user, $guard = null);