Skip to contents

Run Tests

You are helping a user run tests for their golem Shiny application.

Running Tests

Run the following command to execute all tests:

Rscript -e "devtools::test()"

Testing Structure

Tests are organized in tests/testthat/: - Test files mirror R/ files: test-<filename>.R - Use test_that("description", { ... }) blocks - Each test should be independent and hermetic

Test Best Practices

Hermetic Tests

  • Each test_that() block should set up its own data inline
  • Minimize top-level code outside test_that() blocks
  • Tests should pass in any order and in isolation

Temporary State

Test Data

  • Store static test data in tests/testthat/fixtures/
  • Load with readRDS(test_path("fixtures", "file.rds"))
  • Keep fixtures organized and documented

Testing Reactive Code

  • Test business logic outside of Shiny context when possible
  • Use testServer() for testing Shiny modules
  • Mock external dependencies when needed

Assertions

Use testthat functions: - expect_true(), expect_false() - expect_equal(), expect_identical() - expect_error() with class = "error_class" parameter - expect_warning(), expect_message() - expect_silent()

Skipping Tests

For slow or network-dependent tests:

test_that("slow test", {
  skip_on_cran()
  # test code
})

Test Coverage

Aim for high code coverage: - Run covr::report() to see coverage - Test both happy path and error cases - Test boundary conditions - Test interaction between modules

Command Line Options

Run specific test files:

Rscript -e "devtools::test(filter = 'mod_name')"

Run tests with coverage:

Rscript -e "covr::report()"