테스트
설정
변경을 보내기 전에 자신의 컴퓨터에서 검사하세요.
시작하기 전에
시작하기 전에 링크-
개발 환경 준비를 마치세요. Go 테스트는 빌드된 웹 앱을 제공하므로 웹 앱을 먼저 빌드하세요.
-
테스트용 브라우저를 한 번 설치하세요:
Terminal window npx --prefix app/frontend playwright install chromium
평소 검사 실행하기
평소 검사 실행하기 링크-
Go 코드를 빌드하고 vet을 실행하세요:
Terminal window go build ./...go vet ./... -
Go 테스트를 실행하세요:
Terminal window go test ./... -
웹 앱을 검사하고 테스트하세요:
Terminal window npm --prefix app/frontend run checknpm --prefix app/frontend run lintnpm --prefix app/frontend run test -
계층 규칙과 파일 배치 규칙을 실행하세요:
Terminal window go test -tags structure ./app/backend/tools/structurecheck
실패가 하나도 없어야 합니다. CI도 같은 명령을 실행하며, Go 명령은 amd64와 arm64에서 실행하고, 레이스 감지기를 켠 실행(go test -race ./...)을 한 번 더 합니다.
엔드투엔드 테스트 실행하기
엔드투엔드 테스트 실행하기 링크엔드투엔드 테스트는 실제 프로그램을 상대로 실제 브라우저를 움직입니다. 손댄 영역의 프로젝트를 실행하세요:
npm --prefix app/frontend run e2e -- --project=movies이 실행은 새 설정 폴더로 자체 HolyArrs를 시작합니다. setup 프로젝트가 먼저 소유자를 만들고, 다른 프로젝트 대부분은 그것을 기다립니다. 릴리스 전에는 --project 없이 전체를 실행하세요.
선택 사항
선택 사항 링크어떤 프로젝트를 실행할까
어떤 프로젝트를 실행할까 링크| 바꾼 것 | 실행할 것 |
|---|---|
| 영화 | movies |
| 시리즈 | shows |
| 요청 | requests, lists, reports |
| 다운로드 | sources, downloaders, downloads |
| 로그인과 사용자 | accounts, kid |
| 상태 점검과 일정 | schedules, controls |
| 페이지 레이아웃 | desktop, phone, a11y |
프로젝트 이름은 app/frontend/playwright.config.ts에 있습니다. 다른 프로젝트에 의존하는 프로젝트는 그 프로젝트를 먼저 실행합니다.
새 테스트를 둘 곳
새 테스트를 둘 곳 링크| 종류 | 위치 |
|---|---|
| Go | 테스트하는 파일 옆 |
| 웹 단위 | 해당 파일 옆에 name.test.ts로 |
| 엔드투엔드 | app/tests/<module>/ |
실제 외부 서비스는 절대 호출하지 마세요. app/tests/fakes 아래에 대역을 추가하세요. 자신의 컴퓨터에서만 통과하는 테스트는 고장 난 테스트입니다.
문제가 생기면
문제가 생기면 링크증상. 구조 검사가 실패합니다. 원인. 메시지에 파일과 어긴 규칙이 나옵니다. 해결. 코드를 옮기거나, 높은 모듈에서 단순 데이터를 넘기세요. 모듈을 참고하세요.
증상. 엔드투엔드 테스트가 시작되지 않습니다.
원인. 테스트용 브라우저가 설치되어 있지 않습니다.
해결. 위의 playwright install 줄을 실행하세요.
증상. 페이지가 없어서 Go 테스트가 실패합니다.
원인. 웹 앱이 빌드되지 않았습니다.
해결. npm --prefix app/frontend run build를 실행하세요.
전문가용
전문가용 링크빌드 태그
태그가 붙은 테스트는 일반 go test ./...에서 건너뜁니다. 실행하려면 -tags <tag>를 넘기세요.
| 태그 | 내용 |
|---|---|
structure |
tools/structurecheck의 계층, 파일 배치, SQL 위치, 주석 규칙 |
measure |
다운로드 시간 측정 검사 |
lab |
테스트 랩의 실제 앱을 상대로 하는 테스트. HOLYARRS_LAB_*를 읽고, 설정되어 있지 않으면 건너뜁니다 |
labms, livesubs |
미디어 서버와 실제 자막 사이트를 위한 랩 실행 |
긴 실행과 장애 실행
CI는 일반 테스트에 더해 이것들을 실행합니다. 릴리스 전에 실행하세요.
go test -count=1 -run '^TestFault|^TestCrashInEveryLoopIsContained$' ./app/backend/cmd/holyarrsHOLYARRS_RESTART_TIMING=1 go test -count=1 -run '^TestCrashRestartTime$' ./app/backend/cmd/holyarrsHOLYARRS_MEMORY=1 go test -count=1 -timeout 30m -run '^TestMemoryPartsRuns$' ./app/backend/cmd/holyarrsgo test -count=1 -run '^TestDownloaderConformance$' ./app/backend/internal/downloads| 변수 | 하는 일 |
|---|---|
HOLYARRS_FAULT_OUT |
장애 실행이 표를 기록하는 파일 |
HOLYARRS_RESTART_TIMING, HOLYARRS_RESTART_TIMING_OUT |
충돌부터 로그인까지의 시간 측정을 켜고 출력 파일을 지정 |
HOLYARRS_MEMORY, HOLYARRS_MEMORY_OUT |
메모리 실행을 켜고 출력 파일을 지정 |
HOLYARRS_CRASH_RUNS, HOLYARRS_CRASH_SEED |
app/backend/internal/mediafiles/dbtests(crash_test.go)에 있는 충돌 루프의 횟수와 시드. -short에서는 건너뜁니다 |
대역 서버와 변수
엔드투엔드 테스트는 다운로더, 소스, 메타데이터 서버의 대역 서버를 시작하므로 어떤 테스트도 실제 서비스에 닿지 않습니다. 테스트는 HOLYARRS_TMDB_URL, HOLYARRS_MUSICBRAINZ_URL, HOLYARRS_PLEX_URL, HOLYARRS_QBITTORRENT_URL 같은 변수를 설정해 프로그램이 대역 서버를 가리키게 합니다. 실제 설치에서는 전혀 필요 없습니다.
API 계약에는 자체 테스트가 있습니다. TestOpenAPIGenerated는 openapi.json이 경로와 어긋나면 실패하고, tools/structurecheck/testdata의 경로 표 스냅샷은 경로가 추가되거나 제거되거나 옮겨지면 실패합니다.
관련 문서
관련 문서 링크HolyArrs는 무료입니다. 시간을 아끼는 데 도움이 됐다면 GitHub에서 스타를 누르거나, 후원하거나, 커피 한 잔을 사 주세요.