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.md
source content

パズルテストの実行

jigsawRテストスイートを実行し結果を解釈する。

使用タイミング

  • パッケージのRソースコードを変更した後
  • 新しいパズルタイプや機能を追加した後
  • コミット前に何も壊れていないことを確認する場合
  • 特定のテスト失敗をデバッグする場合

入力

  • 必須: テストスコープ(
    full
    filtered
    、または
    single
  • 任意: フィルターパターン(filteredモード用、例:
    "snic"
    "rectangular"
  • 任意: 特定のテストファイルパス(singleモード用)

手順

ステップ1: テストスコープの選択

スコープ使用場面所要時間
Fullコミット前、大きな変更後約2-5分
Filtered1つのパズルタイプでの作業中約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')"

期待結果: パス/フェイル/スキップカウントを含むテスト出力。

失敗時:

  • --vanilla
    フラグを使用しないこと。renvは
    .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: 失敗の調査

テストが失敗した場合:

  1. 失敗メッセージを読む — ファイル、行、期待値と実際の値が含まれる
  2. 新しい失敗か既存のものか確認する
  3. アサーション失敗の場合、テストとテスト対象の関数を読む
  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)
  • 予期しない警告がない
  • スキップカウントが期待値と一致する(オプション依存スキップのみ)
  • テストカウントが減少していない(テストが誤って削除されていない)

よくある落とし穴

  • --vanilla
    の使用
    : renvの有効化を破壊する。jigsawRでは絶対に使用しないこと。
  • 複雑な
    -e
    文字列
    : シェルエスケープの問題がExit code 5を引き起こす。スクリプトファイルを使用する。
  • 古いパッケージ状態: NAMESPACEに影響するコードを変更した場合、テスト前に
    devtools::load_all()
    または
    devtools::document()
    を実行する。
  • テスト依存の欠如: 一部のテストにはsuggestedパッケージが必要。
    DESCRIPTION
    のSuggestsフィールドを確認する。
  • 並列テストの問題: テストが干渉する場合、
    testthat::test_file()
    で順次実行する。

関連スキル

  • generate-puzzle
    — テストと動作が一致するか検証するためにパズルを生成する
  • add-puzzle-type
    — 新しいタイプには包括的なテストスイートが必要
  • write-testthat-tests
    — Rテスト記述の一般的なパターン
  • validate-piles-notation
    — フルスイートでPILES解析を独立してテストする