콘텐츠로 이동

테스트

설정

변경을 보내기 전에 자신의 컴퓨터에서 검사하세요.

시작하기 전에

시작하기 전에 링크
  • 개발 환경 준비를 마치세요. Go 테스트는 빌드된 웹 앱을 제공하므로 웹 앱을 먼저 빌드하세요.

  • 테스트용 브라우저를 한 번 설치하세요:

    Terminal window
    npx --prefix app/frontend playwright install chromium

평소 검사 실행하기

평소 검사 실행하기 링크
  1. Go 코드를 빌드하고 vet을 실행하세요:

    Terminal window
    go build ./...
    go vet ./...
  2. Go 테스트를 실행하세요:

    Terminal window
    go test ./...
  3. 웹 앱을 검사하고 테스트하세요:

    Terminal window
    npm --prefix app/frontend run check
    npm --prefix app/frontend run lint
    npm --prefix app/frontend run test
  4. 계층 규칙과 파일 배치 규칙을 실행하세요:

    Terminal window
    go test -tags structure ./app/backend/tools/structurecheck

실패가 하나도 없어야 합니다. CI도 같은 명령을 실행하며, Go 명령은 amd64와 arm64에서 실행하고, 레이스 감지기를 켠 실행(go test -race ./...)을 한 번 더 합니다.

엔드투엔드 테스트 실행하기

엔드투엔드 테스트 실행하기 링크

엔드투엔드 테스트는 실제 프로그램을 상대로 실제 브라우저를 움직입니다. 손댄 영역의 프로젝트를 실행하세요:

Terminal window
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는 일반 테스트에 더해 이것들을 실행합니다. 릴리스 전에 실행하세요.

Terminal window
go test -count=1 -run '^TestFault|^TestCrashInEveryLoopIsContained$' ./app/backend/cmd/holyarrs
HOLYARRS_RESTART_TIMING=1 go test -count=1 -run '^TestCrashRestartTime$' ./app/backend/cmd/holyarrs
HOLYARRS_MEMORY=1 go test -count=1 -timeout 30m -run '^TestMemoryPartsRuns$' ./app/backend/cmd/holyarrs
go 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에서 스타를 누르거나, 후원하거나, 커피 한 잔을 사 주세요.