Pest란
Pest는 PHPUnit 위에 구축된 테스트 프레임워크로, Laravel 11 이후의 신규 프로젝트에 기본으로 채용되어 있습니다. PHPUnit의 풍부한 어서션군을 그대로 이용하면서, 클로저 기반의 간결한 구문으로 테스트를 기술할 수 있습니다. PHPUnit과의 주요 차이:Pest의 테스트는 PHPUnit으로 실행되므로, 기존의 PHPUnit 테스트와 공존할 수 있습니다.
php artisan test 또는 vendor/bin/pest로 실행합니다.describe / it / test의 사용 구분
test()
가장 심플한 정의. 테스트명을 그대로 설명문으로서 사용합니다.
it()
“it should…”와 같은 영어적인 문체로 자연 언어에 가까운 기술을 할 수 있습니다.
describe()
관련된 테스트를 그룹화합니다. beforeEach()의 공유나 파일 내에서의 논리적인 정리에 사용합니다.
Expectation API
expect()는 Pest 독자의 어서션 구문입니다. 메서드 체인으로 조건을 쌓아 올릴 수 있습니다.
기본적인 어서션
모델에 대한 어서션
and() 체인
each()로 배열의 각 요소를 검증
데이터셋을 사용한 파라미터화 테스트
같은 로직을 여러 입력값으로 테스트하려면dataset() 또는 인라인 with()를 사용합니다.
인라인 데이터셋
이름 붙은 데이터셋
tests/Datasets 디렉토리에 데이터셋을 정의합니다.
클로저를 사용한 동적 데이터셋
Mockery를 사용한 유닛 테스트
서비스의 모크
스파이
스파이는 모크와 달리, 구현을 호출하면서 호출 기록을 남깁니다.부분 모크
일부 메서드만 모크하고, 다른 것은 실제 구현을 사용합니다.HTTP 페이크에 의한 외부 API 호출의 테스트
Http::fake()를 사용하면 실제 HTTP 요청을 보내지 않고 응답을 스텁할 수 있습니다.
기본적인 페이크
에러 응답의 테스트
네트워크 장애의 시뮬레이션
이벤트·메일·알림의 페이크
Event::fake()
Mail::fake()
Notification::fake()
Artisan 커맨드의 테스트
대화형 커맨드의 테스트
RefreshDatabase와 LazilyRefreshDatabase
RefreshDatabase
각 테스트 후에 데이터베이스를 롤백하고, 클린한 상태를 유지합니다. 테스트 스위트 개시 시에 마이그레이션을 실행합니다.
LazilyRefreshDatabase
RefreshDatabase는 모든 테스트에서 마이그레이션을 확인하지만, LazilyRefreshDatabase는 데이터베이스를 실제로 변경하는 테스트가 실행될 때까지 마이그레이션을 지연시킵니다. 데이터베이스를 만지지 않는 테스트가 많은 경우에 고속화할 수 있습니다.
코드 커버리지의 계측
Xdebug 또는 PCOV가 필요합니다.관련 페이지
테스트 입문
Laravel에서의 테스트의 기본적인 작성법과
php artisan test의 사용법을 확인합니다.