Agent-almanac run-puzzle-tests
install
source · Clone the upstream repo
git clone https://github.com/pjt222/agent-almanac
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/pjt222/agent-almanac "$T" && mkdir -p ~/.claude/skills && cp -r "$T/i18n/ja/skills/run-puzzle-tests" ~/.claude/skills/pjt222-agent-almanac-run-puzzle-tests-b6c4e5 && rm -rf "$T"
manifest:
i18n/ja/skills/run-puzzle-tests/SKILL.mdsource content
パズルテストの実行
jigsawRテストスイートを実行し結果を解釈する。
使用タイミング
- パッケージのRソースコードを変更した後
- 新しいパズルタイプや機能を追加した後
- コミット前に何も壊れていないことを確認する場合
- 特定のテスト失敗をデバッグする場合
入力
- 必須: テストスコープ(
、full
、またはfiltered
)single - 任意: フィルターパターン(filteredモード用、例:
、"snic"
)"rectangular" - 任意: 特定のテストファイルパス(singleモード用)
手順
ステップ1: テストスコープの選択
| スコープ | 使用場面 | 所要時間 |
|---|---|---|
| Full | コミット前、大きな変更後 | 約2-5分 |
| Filtered | 1つのパズルタイプでの作業中 | 約30秒 |
| Single | 特定のテストファイルのデバッグ | 約10秒 |
期待結果: 現在のワークフローに基づいてテストスコープが選択される:コミット前はフルスイート、特定のパズルタイプでの作業時はfiltered、1つのテストのデバッグ時はsingle。
失敗時: どのスコープを使用するか不明な場合は、フルスイートをデフォルトにする。時間はかかるがクロスタイプのリグレッションをキャッチできる。
ステップ2: テストスクリプトの作成と実行
フルスイート:
スクリプトファイルを作成する(例:
/tmp/run_tests.R):
devtools::test()
R_EXE="/mnt/c/Program Files/R/R-4.5.0/bin/Rscript.exe" cd /mnt/d/dev/p/jigsawR && "$R_EXE" -e "devtools::test()"
パターンによるフィルタリング:
"$R_EXE" -e "devtools::test(filter = 'snic')"
シングルファイル:
"$R_EXE" -e "testthat::test_file('tests/testthat/test-snic-puzzles.R')"
期待結果: パス/フェイル/スキップカウントを含むテスト出力。
失敗時:
フラグを使用しないこと。renvは--vanilla
が有効化に必要.Rprofile- renvエラーの場合、最初に
を実行するrenv::restore() - Exit code 5で失敗する複雑なコマンドの場合、代わりにスクリプトファイルに書く
ステップ3: 結果の解釈
サマリー行を探す:
[ FAIL 0 | WARN 0 | SKIP 7 | PASS 2042 ]
- PASS: 成功したテスト
- FAIL: 失敗したテスト(調査が必要)
- SKIP: スキップされたテスト(通常
のようなオプションパッケージの欠如による)snic - WARN: テスト中の警告(レビューするがブロッキングではない)
期待結果: PASS、FAIL、SKIP、WARNカウントを特定するためにサマリー行が解析される。クリーンなテスト実行ではFAIL = 0。
失敗時: サマリー行が見えない場合、テストランナーが完了前にクラッシュした可能性がある。サマリーの上のR レベルエラーを確認する。出力が切り捨てられている場合、ファイルにリダイレクトする:
"$R_EXE" -e "devtools::test()" > test_results.txt 2>&1。
ステップ4: 失敗の調査
テストが失敗した場合:
- 失敗メッセージを読む — ファイル、行、期待値と実際の値が含まれる
- 新しい失敗か既存のものか確認する
- アサーション失敗の場合、テストとテスト対象の関数を読む
- エラー失敗の場合、関数シグネチャが変更されたか確認する
# 詳細出力で失敗テストのみを実行 "$R_EXE" -e "testthat::test_file('tests/testthat/test-failing.R', reporter = 'summary')"
期待結果: 各失敗テストの根本原因が特定される。失敗は真のリグレッション(コードの修正が必要)かテスト環境の問題(依存関係の欠如、パスの問題)のいずれか。
失敗時: 失敗メッセージが不明確な場合、テストに
browser()またはprint()ステートメントを追加し、対話的デバッグのためにtestthat::test_file()で再実行する。
ステップ5: スキップ理由の確認
オプション依存が欠落している場合のスキップされたテストは正常:
パッケージテストはsnic
でスキップskip_if_not_installed("snic")- 特定のOSを必要とするテストは
でスキップskip_on_os() - CRAN専用スキップは
skip_on_cran()
スキップ理由が正当であり、実際の失敗を隠していないことを確認する。
期待結果: すべてのスキップが正当な理由(オプション依存がインストールされていない、プラットフォーム固有のスキップ、CRAN専用スキップ)で説明される。実際のテスト失敗を隠すスキップはない。
失敗時: スキップが疑わしい場合、一時的に
skip_if_*()呼び出しを削除してテストを実行し、パスするか隠れた失敗を明らかにするか確認する。
バリデーション
- すべてのテストがパスする(FAIL = 0)
- 予期しない警告がない
- スキップカウントが期待値と一致する(オプション依存スキップのみ)
- テストカウントが減少していない(テストが誤って削除されていない)
よくある落とし穴
の使用: renvの有効化を破壊する。jigsawRでは絶対に使用しないこと。--vanilla- 複雑な
文字列: シェルエスケープの問題がExit code 5を引き起こす。スクリプトファイルを使用する。-e - 古いパッケージ状態: NAMESPACEに影響するコードを変更した場合、テスト前に
またはdevtools::load_all()
を実行する。devtools::document() - テスト依存の欠如: 一部のテストにはsuggestedパッケージが必要。
のSuggestsフィールドを確認する。DESCRIPTION - 並列テストの問題: テストが干渉する場合、
で順次実行する。testthat::test_file()
関連スキル
— テストと動作が一致するか検証するためにパズルを生成するgenerate-puzzle
— 新しいタイプには包括的なテストスイートが必要add-puzzle-type
— Rテスト記述の一般的なパターンwrite-testthat-tests
— フルスイートでPILES解析を独立してテストするvalidate-piles-notation