テスト
セットアップ
変更を送る前に、自分のマシンでチェックします。
始める前に
始める前に へのリンク-
セットアップを済ませます。Go のテストはビルド済みの Web アプリを提供するため、先にビルドしておきます。
-
テスト用のブラウザーを 1 回だけインストールします:
Terminal window npx --prefix app/frontend playwright install chromium
ふだんのチェックを実行する
ふだんのチェックを実行する へのリンク-
Go のコードをビルドし、vet にかけます:
Terminal window go build ./...go vet ./... -
Go のテストを実行します:
Terminal window go test ./... -
Web アプリをチェックし、テストします:
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
失敗が 1 つも表示されなければ問題ありません。CI も同じコマンドを実行します。Go のコマンドは amd64 と arm64 で実行し、さらに race detector を付けた実行(go test -race ./...)を 1 回行います。
エンドツーエンドテストを実行する
エンドツーエンドテストを実行する へのリンクエンドツーエンドテストは、実際のブラウザーで実際のプログラムを操作します。変更した領域のプロジェクトを実行します:
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 のユニットテスト | 対象のファイルの隣に name.test.ts として |
| エンドツーエンド | app/tests/<module>/ |
実際の外部サービスを呼び出してはいけません。app/tests/fakes の下に代役を追加します。自分のマシンでしか通らないテストは、壊れているテストです。
うまくいかないとき
うまくいかないとき へのリンク症状。 構造チェックが失敗する。 原因。 メッセージに、ファイルと違反したルールの名前が出ています。 対処。 コードを移動するか、上のモジュールから単純なデータを渡します。モジュールを参照してください。
症状。 エンドツーエンドテストが開始できない。
原因。 テスト用のブラウザーがインストールされていません。
対処。 上の playwright install の行を実行します。
症状。 ページがないために Go のテストが失敗する。
原因。 Web アプリがビルドされていません。
対処。 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 でスターを付ける、スポンサーになる、コーヒーをおごるのいずれかで応援してください。