Skip to content

Add an R Playwright e2e suite #194

Description

@schloerke

Split out of #185, which closed the R unit-test gaps. This is the one item left: R has no end-to-end tests.

Why it is its own issue

The blocker is fixture infrastructure, not test cases. pkg-py/tests/playwright/ stands up a Python Shiny app per fixture; an R suite needs an equivalent runner for R apps (shiny::runApp() in a subprocess, port allocation, readiness polling, teardown) before a single assertion can be written. That is a different kind of change from writing tests, so it did not belong in #185's PR.

What to cover

The JS bundle is byte-identical between the two packages (md5 335334fd88165d6906de2fd20c2ee174), so an R suite is not re-testing the client — it validates the R server bindings. A subset of the Python suite is enough. Python currently covers:

  • module namespaces
  • module dependency injection
  • bookmark restore
  • input-handler types
  • ShinyOutput

Bookmark restore and input-handler types are the highest value in R, since those are where the two servers' implementations actually differ (pkg-r/R/bookmark.R uses pinned shiny::: internals; default_input_handler() exists specifically to undo jsonlite/shiny simplification that Python never does).

Module dependency injection is likely not applicable — set_react_page()'s renderer-dependency harvesting is Shiny Express-only and has no R analogue by an explicit decision.

Notes

  • decisions/2026-03-17-playwright-testing-architecture.md records the recommended approach (code-gen from TypeScript) for browser testing generally; worth reading before picking a direction.
  • The Makefile pattern to mirror: py-test-e2e clears the addopts that otherwise ignore the playwright/ subtree, keeping py-check-tests fast.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions