ข้ามไปยังเนื้อหา

การทดสอบ

ตั้งค่า

ตรวจการแก้ของคุณบนเครื่องก่อนส่ง

  • ทำการตั้งค่าเริ่มต้นให้เสร็จ เทสต์ Go ใช้เว็บแอปที่สร้างแล้ว จึงต้องสร้างก่อน

  • ติดตั้งเบราว์เซอร์สำหรับทดสอบครั้งเดียว:

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

รันการตรวจสอบประจำวัน

ลิงก์ไปยัง รันการตรวจสอบประจำวัน
  1. สร้างและ vet โค้ด Go:

    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 และมีอีกหนึ่งรอบที่เปิด race detector (go test -race ./...)

เทสต์ end-to-end ควบคุมเบราว์เซอร์จริงที่ต่อกับโปรแกรมจริง รันโปรเจกต์ของส่วนที่คุณแตะ:

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 ข้างไฟล์ที่ทดสอบ
Web unit ข้างไฟล์ของมัน ตั้งชื่อ name.test.ts
End-to-end app/tests/<module>/

ห้ามเรียกบริการภายนอกจริง ให้เพิ่มตัวจำลองไว้ใต้ app/tests/fakes เทสต์ที่ผ่านเฉพาะบนเครื่องของคุณถือว่าเสีย

อาการ. การตรวจสอบโครงสร้างล้มเหลว สาเหตุ. ข้อความจะบอกชื่อไฟล์และกฎที่คุณทำผิด วิธีแก้. ย้ายโค้ด หรือส่งข้อมูลธรรมดาลงมาจากโมดูลชั้นบน ดูโมดูล

อาการ. เทสต์ end-to-end เริ่มไม่ได้ สาเหตุ. ยังไม่ได้ติดตั้งเบราว์เซอร์สำหรับทดสอบ วิธีแก้. รันบรรทัด playwright install ข้างบน

อาการ. เทสต์ Go ล้มเหลวเพราะไม่มีหน้าเว็บ สาเหตุ. ยังไม่ได้สร้างเว็บแอป วิธีแก้. รัน npm --prefix app/frontend run build

Build tag

เทสต์ที่มีแท็กจะถูกข้ามเมื่อรัน go test ./... ธรรมดา ใส่ -tags <tag> เพื่อรัน

แท็ก ครอบคลุม
structure กฎของลำดับชั้น โครงสร้างไฟล์ ที่อยู่ของ SQL และคอมเมนต์ใน tools/structurecheck
measure การตรวจเวลาของการดาวน์โหลด
lab เทสต์กับแอปจริงในแล็บทดสอบ อ่าน HOLYARRS_LAB_* และข้ามเมื่อไม่ได้ตั้งค่า
labms, livesubs การรันในแล็บสำหรับมีเดียเซิร์ฟเวอร์และเว็บคำบรรยายจริง
การรันยาวและการรัน fault

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 ไฟล์ที่การรัน fault เขียนตารางผลลัพธ์ลงไป
HOLYARRS_RESTART_TIMING, HOLYARRS_RESTART_TIMING_OUT เปิดการจับเวลาตั้งแต่แครชจนถึงล็อกอินได้ และตั้งชื่อไฟล์ผลลัพธ์
HOLYARRS_MEMORY, HOLYARRS_MEMORY_OUT เปิดการรันวัดหน่วยความจำ และตั้งชื่อไฟล์ผลลัพธ์
HOLYARRS_CRASH_RUNS, HOLYARRS_CRASH_SEED จำนวนรอบและ seed ของลูปแครชใน app/backend/internal/mediafiles/dbtests (crash_test.go) ซึ่งจะถูกข้ามเมื่อใช้ -short
เซิร์ฟเวอร์จำลองและตัวแปร

เทสต์ end-to-end เริ่มเซิร์ฟเวอร์จำลองสำหรับตัวดาวน์โหลด แหล่งค้นหา และเซิร์ฟเวอร์ metadata เทสต์จึงไม่แตะบริการจริงเลย เทสต์ตั้งตัวแปรเช่น HOLYARRS_TMDB_URL, HOLYARRS_MUSICBRAINZ_URL, HOLYARRS_PLEX_URL และ HOLYARRS_QBITTORRENT_URL เพื่อให้โปรแกรมชี้ไปที่เซิร์ฟเวอร์จำลอง การติดตั้งจริงไม่เคยต้องใช้ตัวแปรเหล่านี้

API contract มีเทสต์ของตัวเอง TestOpenAPIGenerated ล้มเหลวเมื่อ openapi.json ไม่ตรงกับเส้นทาง และ snapshot ของตารางเส้นทางใน tools/structurecheck/testdata ล้มเหลวเมื่อมีเส้นทางที่เพิ่ม ลบ หรือย้าย

HolyArrs ใช้ได้ฟรี ถ้าช่วยประหยัดเวลาคุณได้ กดดาวบน GitHub, สนับสนุนโปรเจกต์ หรือ เลี้ยงกาแฟผู้พัฒนา