drake_context("prework")
test_with_dir("packages are loaded and prework is run", {
skip_on_cran() # CRAN gets essential tests only (check time limits).
skip_if_not_installed("abind")
on.exit(options(test_drake_option_12345 = NULL))
options(test_drake_option_12345 = "unset")
expect_equal(getOption("test_drake_option_12345"), "unset")
config <- dbug()
try(detach("package:abind", unload = TRUE), silent = TRUE) # nolint
expect_error(abind(1))
# Load packages with the 'packages' argument
config$packages <- "abind"
config$prework <- "options(test_drake_option_12345 = 'set')"
config$plan <- drake_plan(
x = getOption("test_drake_option_12345"),
y = c(deparse(body(abind)), x)
)
config$targets <- config$plan$target
expect_false(any(c("x", "y") %in% config$cache$list()))
testrun(config)
expect_true(all(c("x", "y") %in% config$cache$list()))
expect_equal(readd(x), "set")
expect_true(length(readd(y)) > 0)
clean()
# load packages the usual way
options(test_drake_option_12345 = "unset")
expect_equal(getOption("test_drake_option_12345"), "unset")
try(detach("package:abind", unload = TRUE), silent = TRUE) # nolint
expect_error(abind(1))
library(abind) # nolint
config$packages <- NULL
expect_false(any(c("x", "y") %in% config$cache$list()))
# drake may be loaded with devtools::load_all() but not
# installed.
scenario <- get_testing_scenario()
suppressWarnings(
make(
plan = config$plan,
targets = config$targets,
envir = config$envir,
verbose = 0L,
parallelism = scenario$parallelism,
jobs = scenario$jobs,
prework = config$prework,
command = config$command,
session_info = FALSE
)
)
expect_true(all(c("x", "y") %in% config$cache$list()))
expect_equal(readd(x), "set")
expect_true(length(readd(y)) > 0)
})
test_with_dir("prework can be an expression", {
skip_on_cran()
on.exit(options(test_drake_option_12345 = NULL))
options(test_drake_option_12345 = "unset")
expect_equal(getOption("test_drake_option_12345"), "unset")
config <- dbug()
config$plan <- drake_plan(x = getOption("test_drake_option_12345"))
config$targets <- config$plan$target
config$prework <- quote(options(test_drake_option_12345 = "set"))
testrun(config)
expect_equal(readd(x), "set")
})
test_with_dir("prework can be an expression", {
skip_on_cran()
on.exit(
options(test_drake_option_12345 = NULL, test_drake_option_6789 = NULL)
)
options(test_drake_option_12345 = "unset", test_drake_option_6789 = "unset")
expect_equal(getOption("test_drake_option_12345"), "unset")
expect_equal(getOption("test_drake_option_6789"), "unset")
config <- dbug()
config$plan <- drake_plan(
x = getOption("test_drake_option_12345"),
y = getOption("test_drake_option_6789")
)
config$targets <- config$plan$target
config$prework <- list(
quote(options(test_drake_option_12345 = "set")),
quote(options(test_drake_option_6789 = "set"))
)
testrun(config)
expect_equal(readd(x), "set")
expect_equal(readd(y), "set")
})
test_with_dir("prework must be interpretable as a language object", {
skip_on_cran()
plan <- drake_plan(x = 1)
f <- function(x) {
x + 1
}
expect_error(
make(plan, prework = f),
regexp = "prework must be an expression"
)
})
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.