L’interface est localisée ; les présentations et documents des Skills sont traduits automatiquement par IA dans votre langue. Le code, les commandes, chemins et termes techniques restent en version originale, et le document de l’auteur fait foi.
Explorer les Skills
Développement · SKILL.md

run-puzzle-tests

run-puzzle-tests

WSL R実行経由でjigsawRテストスイートを実行する。フルスイート、 パターンによるフィルタリング、シングルファイルをサポート。 パス/フェイル/スキップカウントを解釈し、失敗テストを特定する。 --vanillaフラグは使用しない(renvは.Rprofileが有効化に必要)。 Rソースコードの変更後、新しいパズルタイプや機能の追加後、 コミット前の破壊確認、特定のテスト失敗のデバッグに使用する。

Independent GitHub snapshot · Automated classification · Original documentation governs

Documentation de la Skill

GitHub

name: run-puzzle-tests description: > WSL R実行経由でjigsawRテストスイートを実行する。フルスイート、 パターンによるフィルタリング、シングルファイルをサポート。 パス/フェイル/スキップカウントを解釈し、失敗テストを特定する。 --vanillaフラグは使用しない(renvは.Rprofileが有効化に必要)。 Rソースコードの変更後、新しいパズルタイプや機能の追加後、 コミット前の破壊確認、特定のテスト失敗のデバッグに使用する。 license: MIT allowed-tools: Read Write Edit Bash Grep Glob metadata: author: Philipp Thoss version: "1.0" domain: jigsawr complexity: basic language: R tags: jigsawr, testing, testthat, renv, wsl locale: ja source_locale: en source_commit: 6f65f316 fence_basis_commit: 6f65f316 translator: claude-sonnet-4-6 translation_date: 2026-03-16

パズルテストの実行

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. エラー失敗の場合、関数シグネチャが変更されたか確認する
# Run just the failing test with verbose output
"$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解析を独立してテストする
Skills enregistrées