App 테스트하기
변경한 동작을 검사하고 온보딩 결과를 정리합니다.
App 테스트하기
Resource 만들기를 마친 뒤 Core 루트에서 생성된 Note 권한 선언 테스트를 실행합니다.
task test -- packages/workshop/tests/Feature/NoteAuthorizationTest.php --compact
task artisan -- nexia-apps:doctor-package-app workshop확인
지정 테스트가 실제로 실행·성공하고 doctor에 FAIL이 없는지 확인합니다. 두 결과를 전체 검증으로 보지 말고 아래에서 변경 위험의 동작 검사를 추가합니다.
이 테스트는 Module의 소유권·권한 프로필을 검사하고 doctor는 패키지 연결을 확인합니다. HTTP 저장이 올바르게 허용·거부되는지까지 증명하지는 않습니다.
변경 위험에 맞는 검사
테스트는 App의 tests/에 둡니다. Scaffold의 extra.nexia.test_paths: ["tests"]와 다음 package-local Pest 바인딩을 사용합니다.
use Tests\TestCase;
uses(TestCase::class)->in(__DIR__);| 변경 | 실제 경계에서 확인할 것 |
|---|---|
| 분류 필드 | 인가된 생성·수정 후 조회, null로 비우기, 80자 초과 거부 |
| 권한·소유권 | 허용 사용자, 거부 사용자, 다른 조직·테넌트, 목록과 단건의 일치 |
| 마이그레이션 | 기존 행 보존, DB 제약의 잘못된 쓰기 거부 |
| Event 처리 | 중복 전달의 효과 1회, 테넌트 누락·권한 회수 시 안전한 실패 |
| 초기화 | repair 반복 시 같은 데이터 유지 |
Endpoint 테스트는 Workshop이 사용 가능한 테넌트 fixture부터 준비합니다. 그렇지 않으면 Policy 전에 app.installed:workshop이 요청을 거부할 수 있습니다. 호스트 소유 상태는 용도에 맞는 SDK 테스트 계약 Nexia\Testing\Contracts\ContributionTestHost, HostTestStore, ApprovalTestHost로 준비합니다. App 테스트에 호스트 Eloquent 모델을 import하지 않습니다. Actor·설치 fixture 계약은 SDK 계약을 참고하세요.
테넌트 context helper만 호출해도 HTTP host가 바뀌는 것은 아닙니다. 요청은 해당 테넌트 도메인으로 보내야 합니다. 범위 밖 레코드를 숨기기 위한 not-found 응답을 포함해 endpoint가 약속한 상태를 검사합니다.
개발 컨테이너에서 실행
task test -- packages/workshop/tests --sequential --compactWrapper가 Docker 내부 DB에 연결합니다. 호스트에서 Pest를 실행하면 postgres 이름을 해석할 수 없습니다. DB_HOST를 바꾸는 우회는 다른 DB를 선택할 수 있습니다. 테넌트 생명주기·병렬 바인딩·템플릿 DB 문제는 테스트 실패 해결을 사용하세요. 오래된 checkout에 테스트 키가 없다면 task artisan -- key:generate --env=testing --ansi로 복구합니다.
프런트엔드 테스트는 변경 동작을 다룰 때 호스트 도구에 패키지 경로를 지정해 실행합니다. 전체 task check는 명시적인 전체 검사나 develop → main 승격에 사용하며 매 수정마다 실행하지 않습니다.
App에 프런트엔드 테스트 파일을 작성했다면 Core 루트에서 해당 경로만 실행합니다.
task frontend:test -- packages/workshop/resources/jsNote 생성기는 프런트엔드 테스트를 만들지 않습니다. 선택된 테스트가 없다는 출력은 성공 근거가 아닙니다.
온보딩 마무리
같은 소스 상태에서 얻은 결과는 그대로 재사용합니다.
| 확인 항목 | 근거 |
|---|---|
| 로컬 호스트 | 빠른 시작의 doctor와 테넌트 로그인 |
| 실제 소스 연결 | Composer 설치 경로와 App 루트 일치 |
| 생명주기 | 활성화, 대상 마이그레이션, 테넌트 설치 |
| 화면 | Note 생성·목록·Inspector·상세·편집 |
Core와 App 각각에서 git status --short를 확인합니다. 활성화가 Core pnpm-lock.yaml에 workspace importer를 추가할 수 있으므로 App 디렉터리가 ignore된다는 이유만으로 Core가 불변이라고 판단하지 않습니다. 다른 작업은 보존하고 생긴 변경을 검토하세요. 완료 문구를 얻으려고 성공한 온보딩 검사를 반복하지 않습니다.
릴리스는 App 릴리스하기로 이어집니다. 후보 커밋과 실제 실행한 검사를 기록합니다. 실행 전 검사 계획은 검증 결과가 아닙니다.