R: Locally set options for maximal test reproducibility

local_test_context {testthat} | R Documentation

## Locally set options for maximal test reproducibility

### Description

`local_test_context()` is run automatically by `test_that()` but you may want to run it yourself if you want to replicate test results interactively. If run inside a function, the effects are automatically reversed when the function exits; if running in the global environment, use `withr::deferred_run()` to undo.

`local_reproducible_output()` is run automatically by `test_that()` in the 3rd edition. You might want to call it to override the the default settings inside a test, if you want to test Unicode and coloured output or non-standard width.

### Usage

    local_test_context(.env = parent.frame())

    local_reproducible_output(
      width = 80,
      crayon = FALSE,
      unicode = FALSE,
      .env = parent.frame()
    )

### Arguments

`.env` | Environment to use for scoping; expert use only.
`width` | Value of the `"width"` option.
`crayon` | Value of the `"crayon.enabled"` option.
`unicode` | Value of the `"cli.unicode"` option. The test is skipped if `l10n_info()$`UTF-8`` is `FALSE`.

### Details

`local_test_context()` and `local_reproducible_output()` set the following options with `withr::local_options()`:

- `cli.unicode` (default: `FALSE`) so that the cli package never generates unicode output (normally cli uses unicode on Linux/Mac but not Windows). Windows can't easily save unicode output to disk, so it must be set to false for consistency.

- `crayon.enabled` (default: `FALSE`) suppresses ANSI colours generated by the crayon package (normally colours are used if crayon detects that you're in a terminal that supports colour).

- `width` (default: 80) to control the width of printed output (usually this varies with the size of your console).

In addition, `local_test_context()` sets the following options:

- `cli.dynamic = FALSE` so that tests assume that they are not run in a dynamic console (i.e. one where you can move the cursor around).

- `lifecycle_verbosity = "warning"` so that every lifecycle problem always generates a warning (otherwise deprecated functions don't generate a warning every time).

- `OutDec = "."` so numbers always uses `.` as the decimal point (European users sometimes set `OutDec = ","`.)

- `rlang_interactive = FALSE` so that `rlang::is_interactive()` returns `FALSE`, and code that uses it assumes you're in a non-interactive environment.

- `useFancyQuotes = FALSE` so base R functions always use regular (straight) quotes (otherwise the default is locale dependent, see `sQuote()` for details).

`local_test_context()` also sets envvars `RSTUDIO = 0` (which ensures that RStudio is never detected as running), and `TESTTHAT = "true"` (which ensures that `is_testing()` returns `TRUE)`, and sets collation locale to "C" (which ensures that character sorting the same regardless of current locale).

### Examples

    local({
      local_test_context()
      cat(crayon::blue("Text will not be colored"))
      cat(cli::symbol$ellipsis)
      cat("\n")
    })

    ellipsis <- cli::symbol$ellipsis
    test_that("test ellipsis", {
      expect_equal(ellipsis, cli::symbol$ellipsis)

      local_reproducible_output(unicode = TRUE)
      expect_equal(ellipsis, cli::symbol$ellipsis)
    })

[Package testthat version 3.0.0 Index]