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 = 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 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 = 99999
so the same number of values are printed.OutDec = "."
so numbers always uses.
as the decimal point (European users sometimes setOutDec = ","
).rlang_interactive = FALSE
so thatrlang::is_interactive()
returnsFALSE
, 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, 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 🌈