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, coloured output, or a
non-standard width.
Usage
local_test_context(.env = parent.frame())
local_reproducible_output(
width = 80,
crayon = FALSE,
unicode = FALSE,
rstudio = FALSE,
hyperlinks = FALSE,
lang = "C",
.env = parent.frame()
)Arguments
- .env
Environment to use for scoping; expert use only.
- width
Value of the
"width"option.- crayon
Determines whether or not crayon (now cli) colour should be applied.
- unicode
Value of the
"cli.unicode"option. The test is skipped ifl10n_info()$`UTF-8`isFALSE.- rstudio
Should we pretend that we're inside of RStudio?
- hyperlinks
Should we use ANSI hyperlinks.
- lang
Optionally, supply a BCP47 language code to set the language used for translating error messages. This is a lower case two letter ISO 639 country code, optionally followed by "_" or "-" and an upper case two letter ISO 3166 region code.
Details
local_test_context() sets TESTTHAT = "true", which ensures that
is_testing() returns TRUE and allows code to tell if it is run by
testthat.
In the third edition, local_test_context() also calls
local_reproducible_output() which temporary sets the following options:
cli.dynamic = FALSEso that tests assume that they are not run in a dynamic console (i.e. one where you can move the cursor around).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.cli.condition_width = Infso that new lines introduced while width-wrapping condition messages don't interfere with message matching.crayon.enabled(default:FALSE) suppresses ANSI colours generated by the cli and crayon packages (normally colours are used if cli detects that you're in a terminal that supports colour).cli.num_colors(default:1L) Same as the crayon option.lifecycle_verbosity = "warning"so that every lifecycle problem always generates a warning (otherwise deprecated functions don't generate a warning every time).max.print = 99999so the same number of values are printed.OutDec = "."so numbers always uses.as the decimal point (European users sometimes setOutDec = ",").rlang_interactive = FALSEso thatrlang::is_interactive()returnsFALSE, and code that uses it pretends you're in a non-interactive environment.useFancyQuotes = FALSEso base R functions always use regular (straight) quotes (otherwise the default is locale dependent, seesQuote()for details).width(default: 80) to control the width of printed output (usually this varies with the size of your console).
And modifies the following env vars:
Unsets
RSTUDIO, which ensures that RStudio is never detected as running.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(cli::col_blue("Text will not be colored"))
cat(cli::symbol$ellipsis)
cat("\n")
})
#> Text will not be colored...
test_that("test ellipsis", {
local_reproducible_output(unicode = FALSE)
expect_equal(cli::symbol$ellipsis, "...")
local_reproducible_output(unicode = TRUE)
expect_equal(cli::symbol$ellipsis, "\u2026")
})
#> Test passed 🌈
