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.

local_test_context(.env = parent.frame())

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

.env Environment to use for scoping; expert use only. Value of the "width" option. Value of the "crayon.enabled" option. 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). And modifies the following env vars: • Unsets RSTUDIO, which ensures that RStudio is never detected as running. • Sets TESTTHAT = "true", which ensures that is_testing() returns TRUE. • Sets LANGUAGE = "en", which ensures that no message translation occurs. Finally, it sets the collation locale to "C", which ensures that character sorting the same regardless of system locale. ## Examples local({ local_test_context() cat(crayon::blue("Text will not be colored")) cat(cli::symbol$ellipsis)
cat("\n")
})
#> Text will not be colored…
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)
})
#> Test passed 😸