Nothing
test_that("runTests works", {
calls <- list()
# Tracks the working directory we were in as of the last call
wd <- NULL
# A collection of file names that should throw an error when sourced
filesToError <- "runner2.R"
sourceStub <- function(...){
calls[[length(calls)+1]] <<- list(...)
wd <<- getwd()
if(list(...)[[1]] %in% filesToError){
stop("I was told to throw an error")
}
NULL
}
loadCalls <- list()
loadSupportStub <- function(...){
loadCalls[[length(calls)+1]] <<- list(...)
NULL
}
runTestsSpy <- rewire(runTests, sourceUTF8 = sourceStub, loadSupport=loadSupportStub)
res <- suppressMessages(
runTestsSpy(test_path("../test-helpers/app1-standard"), assert = FALSE)
)
# Should have seen two calls to each test runner
expect_length(calls, 2)
expect_match(calls[[1]][[1]], "runner1\\.R$", perl=TRUE)
expect_match(calls[[2]][[1]], "runner2\\.R$", perl=TRUE)
# Check environments
# Each should be loaded into an isolated env that has a common parent
env1 <- calls[[1]]$envir
env2 <- calls[[2]]$envir
expect_identical(parent.env(env1), parent.env(env2))
expect_true(!identical(env1, env2))
# Check working directory
expect_equal(normalizePath(wd), normalizePath(
file.path(test_path("../test-helpers/app1-standard"), "tests")))
# Check the results
expect_equal(all(res$pass), FALSE)
expect_length(res$file, 2)
expect_equal(basename(res$file[1]), "runner1.R")
expect_equal(res[2,]$result[[1]]$message, "I was told to throw an error")
expect_s3_class(res, "shiny_runtests")
# Check that supporting files were NOT loaded using Spy Functions
expect_length(loadCalls, 0)
# Clear out err'ing files and rerun
filesToError <- character(0)
calls <- list()
res <- runTestsSpy(test_path("../test-helpers/app1-standard"))
expect_equal(all(res$pass), TRUE)
expect_equal(basename(res$file), c("runner1.R", "runner2.R"))
expect_length(calls, 2)
expect_match(calls[[1]][[1]], "runner1\\.R", perl=TRUE)
expect_match(calls[[2]][[1]], "runner2\\.R", perl=TRUE)
})
test_that("calls out to shinytest when appropriate", {
is_legacy_shinytest_val <- TRUE
is_legacy_shinytest_dir_stub <- function(...){
is_legacy_shinytest_val
}
# All are shinytests
runTestsSpy <- rewire(runTests, is_legacy_shinytest_dir = is_legacy_shinytest_dir_stub)
expect_error(
runTestsSpy(test_path("../test-helpers/app1-standard"), assert = FALSE),
"not supported"
)
# Not shinytests
is_legacy_shinytest_val <- FALSE
res <- runTestsSpy(test_path("../test-helpers/app1-standard"))
expect_s3_class(res, "shiny_runtests")
})
test_that("runTests filters", {
calls <- list()
sourceStub <- function(...){
calls[[length(calls)+1]] <<- list(...)
NULL
}
runTestsSpy <- rewire(runTests, sourceUTF8 = sourceStub)
# No filter should see two tests (global.R is sourced from another function)
runTestsSpy(test_path("../test-helpers/app1-standard"))
expect_length(calls, 2)
# Filter down to one (global.R is sourced from another function)
calls <- list()
runTestsSpy(test_path("../test-helpers/app1-standard"), filter="runner1")
expect_length(calls, 1)
calls <- list()
expect_error(runTestsSpy(test_path("../test-helpers/app1-standard"), filter="i don't exist"), "matched the given filter")
})
test_that("runTests handles the absence of tests", {
expect_error(runTests(test_path("../test-helpers/app2-nested")), "No tests directory found")
expect_message(res <- runTests(test_path("../test-helpers/app6-empty-tests")), "No test runners found in")
expect_equal(res$file, character(0))
expect_equal(res$pass, logical(0))
expect_equal(res$result, I(list()))
expect_s3_class(res, "shiny_runtests")
})
test_that("runTests runs as expected without rewiring", {
appDir <- test_path(file.path("..", "test-helpers", "app1-standard"))
df <- testthat::expect_output(
print(runTests(appDir = appDir, assert = FALSE)),
"Shiny App Test Results\\n\\* Success\\n - app1-standard/tests/runner1\\.R\\n - app1-standard/tests/runner2\\.R"
)
expect_equal(df, data.frame(
file = file.path(appDir, "tests", c("runner1.R", "runner2.R")),
pass = c(TRUE, TRUE),
result = I(list(1, NULL)),
stringsAsFactors = FALSE
), ignore_attr = TRUE)
expect_s3_class(df, "shiny_runtests")
})
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.