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. |
|---|---|
| width | Value of the |
| crayon | Value of the |
| unicode | Value of the |
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.
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) })#> ── Failure (<text>:10:3): test ellipsis ──────────────────────────────────────── #> `ellipsis` (`actual`) not equal to cli::symbol$ellipsis (`expected`). #> #> `actual`: "…" #> `expected`: "..." #>