| 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, 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 = "en",
.env = parent.frame()
)
Arguments
.env |
Environment to use for scoping; expert use only. |
width |
Value of the |
crayon |
Determines whether or not crayon (now cli) colour should be applied. |
unicode |
Value of the |
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")
})
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")
})