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.
local_test_context(.env = parent.frame())local_reproducible_output(
width = 80,
crayon = FALSE,
unicode = FALSE,
lang = "en",
.env = parent.frame()
)
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
.
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.
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 = FALSE
so 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 = Inf
so 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 crayon package (normally colours are used if crayon 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 = 99999
so the same number of values are printed.
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 pretends 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).
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.
local({
local_test_context()
cat(crayon::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")
})
Run the code above in your browser using DataLab