スキル一覧に戻る

test-shiny-app

pjt222
更新日 6 days ago
15 閲覧
17
2
17
GitHubで表示
テストtesting

について

このスキルは、開発者がShinyアプリケーションをテストするための支援を行います。ブラウザベースのエンドツーエンドテストにはshinytest2を、サーバーロジックのユニットテストにはtestServer()を使用します。スナップショットテスト、CI統合、外部サービスのモック化についても網羅しています。既存アプリへのテスト追加、新規プロジェクトのテスト環境構築、CI/CDパイプラインへのテスト統合の際にご活用ください。

クイックインストール

Claude Code

推奨
メイン
npx skills add pjt222/agent-almanac -a claude-code
プラグインコマンド代替
/plugin add https://github.com/pjt222/agent-almanac
Git クローン代替
git clone https://github.com/pjt222/agent-almanac.git ~/.claude/skills/test-shiny-app

このコマンドをClaude Codeにコピー&ペーストしてスキルをインストールします

ドキュメント

測 Shiny 應

立全 Shiny 測——以 shinytest2 為端對端與 testServer() 為單測。

  • 加測於既存 Shiny 應→用
  • 為新 Shiny 案立測策→用
  • 重構 Shiny 碼前書回歸測→用
  • Shiny 應測整於 CI/CD→用

  • :Shiny 應路
  • :測範(單測、端對端、皆)
  • :是否用影測(默:e2e 為是)
  • :CI 臺(GitHub Actions、GitLab CI)
  • :所獨測之模

一:裝測依

install.packages("shinytest2")

# For golem apps, add as a Suggests dependency
usethis::use_package("shinytest2", type = "Suggests")

# Set up testthat infrastructure if not present
usethis::use_testthat(edition = 3)

得:shinytest2 裝、testthat 目構在。

敗:shinytest2 需 chromote(無頭 Chrome)。系裝 Chrome/Chromium。WSL 上:sudo apt install -y chromium-browser。以 chromote::find_chrome() 驗。

二:書 testServer() 模單測

tests/testthat/test-mod_dashboard.R

test_that("dashboard module filters data correctly", {
  testServer(dataFilterServer, args = list(
    data = reactive(iris),
    columns = c("Species", "Sepal.Length")
  ), {
    # Set inputs
    session$setInputs(column = "Species")
    session$setInputs(value_select = "setosa")
    session$setInputs(apply = 1)

    # Check output
    result <- filtered()
    expect_equal(nrow(result), 50)
    expect_true(all(result$Species == "setosa"))
  })
})

test_that("dashboard module handles empty data", {
  testServer(dataFilterServer, args = list(
    data = reactive(iris[0, ]),
    columns = c("Species")
  ), {
    # Module should not error on empty data
    expect_no_error(session$setInputs(column = "Species"))
  })
})

要模:

  • testServer() 測模服邏無瀏
  • args 傳反參
  • session$setInputs() 擬用交
  • 直名訪反返值
  • 測邊:空資、NULL 入、無效值

得:模測過於 devtools::test()

敗:testServer() 誤「not a module server function」→確函內用 moduleServer()session$setInputs() 不觸反→設後加 session$flushReact()

三:書 shinytest2 端對端測

tests/testthat/test-app-e2e.R

test_that("app loads and displays initial state", {
  # For golem apps
  app <- AppDriver$new(
    app_dir = system.file(package = "myapp"),
    name = "initial-load",
    height = 800,
    width = 1200
  )
  on.exit(app$stop(), add = TRUE)

  # Wait for app to load
  app$wait_for_idle(timeout = 10000)

  # Check that key elements exist
  app$expect_values()
})

test_that("filter interaction updates the table", {
  app <- AppDriver$new(
    app_dir = system.file(package = "myapp"),
    name = "filter-interaction"
  )
  on.exit(app$stop(), add = TRUE)

  # Interact with the app
  app$set_inputs(`filter1-column` = "cyl")
  app$wait_for_idle()

  app$set_inputs(`filter1-apply` = "click")
  app$wait_for_idle()

  # Snapshot the output values
  app$expect_values(output = "table")
})

要模:

  • AppDriver$new() 啟應於無頭 Chrome
  • 常用 on.exit(app$stop())
  • 模入 ID 用 "moduleId-inputId"
  • app$expect_values() 建/比影檔
  • app$wait_for_idle() 確反更畢

得:端對端測建影檔於 tests/testthat/_snaps/

敗:Chrome 不在→設 CHROMOTE_CHROME 環變為 Chrome 二路。影 CI 敗本地過→察臺依繪差——資影用 app$expect_values() 而非視 app$expect_screenshot()

四:交錄測(可)

shinytest2::record_test("path/to/app")

此於瀏開應含錄面板。交應、後點「Save test」自生測碼。

得:測檔生於 tests/testthat/ 含錄交。

敗:錄不開→先察應於 shiny::runApp() 行成。錄需行應。

五:立影管

影測管期值:

# Accept new/changed snapshots after review
testthat::snapshot_accept("test-app-e2e")

# Review snapshot differences
testthat::snapshot_review("test-app-e2e")

加影目於版控:

tests/testthat/_snaps/    # Committed — contains expected values

得:影檔於 git 為回歸偵。

敗:影不期變→行 testthat::snapshot_review() 見差。納意改以 testthat::snapshot_accept()

六:整於 CI

加於 .github/workflows/R-CMD-check.yaml 或建專流:

- name: Install system dependencies
  run: |
    sudo apt-get update
    sudo apt-get install -y chromium-browser

- name: Set Chrome path
  run: echo "CHROMOTE_CHROME=$(which chromium-browser)" >> $GITHUB_ENV

- name: Run tests
  run: |
    Rscript -e 'devtools::test()'

golem 應→確應包先裝乃測:

- name: Install app package
  run: Rscript -e 'devtools::install()'

得:測過於 CI 含無頭 Chrome。

敗:常 CI 患:Chrome 未裝(加 apt-get 步)、顯服缺(shinytest2 默用無頭、常非患)、緩行超時(增 AppDriver$new()timeout)。

  • devtools::test() 行諸測無誤
  • testServer() 測覆模服邏
  • shinytest2 測覆要用流
  • 影檔入版控
  • 測過於 CI 境
  • 邊測(空資、NULL 入、誤態)

  • 測 UI 繪非邏:用 testServer() 為邏、app$expect_values() 為資。唯視覺重時用 app$expect_screenshot()——影脆於跨臺
  • e2e 模 ID 式:經 AppDriver 設模入用 "moduleId-inputId"(連號分)、非 "moduleId.inputId"
  • 時不穩app$set_inputs() 後常呼 app$wait_for_idle()。否則斷或行於反更前
  • 影漂:勿入異臺生影(Mac 對 Linux)。標 CI 臺生影
  • CI 無 Chrome:shinytest2 需 Chrome/Chromium。常含裝步於 CI 流

  • build-shiny-module — 建可測之明介模
  • scaffold-shiny-app — 立應構含測基
  • write-testthat-tests — R 包通 testthat 模
  • setup-github-actions-ci — R 包(golem 應)CI/CD 立

GitHub リポジトリ

pjt222/agent-almanac
パス: i18n/wenyan-ultra/skills/test-shiny-app
0
agentsagentskillsai-assisted-developmentclaude-codeskillsteams

関連スキル

evaluating-llms-harness

テスト

このClaudeスキルは、lm-evaluation-harnessを実行し、MMLUやGSM8Kなど60以上の標準化学術タスクでLLMをベンチマークします。開発者がモデルの品質を比較し、トレーニングの進捗を追跡し、学術的な結果を報告するために設計されています。このツールはHuggingFaceやvLLMモデルを含む様々なバックエンドをサポートしています。

スキルを見る

cloudflare-cron-triggers

テスト

このスキルは、cron式を使用してWorkersをスケジュールするためのCloudflare Cron Triggersの実装に関する包括的な知識を提供します。定期的なタスクの設定、メンテナンスジョブ、自動化されたワークフローの構築を網羅し、無効なcron式やタイムゾーン問題といった一般的な課題への対処法も含みます。開発者はこれを使用して、スケジュールされたハンドラーの設定、cronトリガーのテスト、WorkflowsやGreen Computeとの連携を構成できます。

スキルを見る

webapp-testing

テスト

このClaude Skillは、Playwrightベースのツールキットを提供し、Pythonスクリプトを通じてローカルWebアプリケーションのテストを可能にします。フロントエンドの検証、UIデバッグ、スクリーンショット撮影、ログ表示を実現し、サーバーライフサイクルを管理します。ブラウザ自動化タスクにご利用いただけますが、コンテキストの汚染を避けるため、スクリプトのソースコードを読むのではなく直接実行してください。

スキルを見る

finishing-a-development-branch

テスト

このスキルは、開発者がテストの合格を確認し、構造化された統合オプションを提示することで、完成した作業を仕上げることを支援します。実装が完了した後のマージ、PR作成、ブランチの整理といったワークフローを案内します。コードが準備できてテスト済みの際に使用し、開発プロセスを体系的に完了させましょう。

スキルを見る