test_that("deprecated in 3rd edition", {
expect_warning(local_mock(), "deprecated")
expect_warning(with_mock(is_testing = function() FALSE), "deprecated")
})
test_that("can change value of internal function", {
local_edition(2)
with_mock(
test_mock_internal2 = function() 5,
expect_equal(test_mock_internal(), 5)
)
# and value is restored on error
expect_error(
with_mock(
test_mock_internal2 = function() 5,
stop("!")
)
)
expect_equal(test_mock_internal(), "y")
})
test_that("mocks can access local variables", {
local_edition(2)
x <- 5
with_mock(
test_mock_internal2 = function() x,
expect_equal(test_mock_internal(), 5)
)
})
test_that("non-empty mock with return value", {
local_edition(2)
expect_true(with_mock(
compare = function(x, y, ...) list(equal = TRUE, message = "TRUE"),
TRUE
))
})
test_that("nested mock", {
local_edition(2)
with_mock(
all.equal = function(x, y, ...) TRUE,
{
with_mock(
expect_warning = expect_error,
{
expect_warning(stopifnot(!compare(3, "a")$equal))
}
)
},
.env = asNamespace("base")
)
expect_false(isTRUE(all.equal(3, 5)))
expect_warning(warning("test"))
})
test_that("can't mock non-existing", {
local_edition(2)
expect_error(with_mock(..bogus.. = identity, TRUE), "Function [.][.]bogus[.][.] not found in environment testthat")
})
test_that("can't mock non-function", {
local_edition(2)
expect_error(with_mock(pkg_and_name_rx = FALSE, TRUE), "Function pkg_and_name_rx not found in environment testthat")
})
test_that("empty or no-op mock", {
local_edition(2)
expect_warning(
expect_null(with_mock()),
"Not mocking anything. Please use named parameters to specify the functions you want to mock.",
fixed = TRUE
)
expect_warning(
expect_true(with_mock(TRUE)),
"Not mocking anything. Please use named parameters to specify the functions you want to mock.",
fixed = TRUE
)
})
test_that("visibility", {
local_edition(2)
expect_warning(expect_false(withVisible(with_mock())$visible))
expect_true(withVisible(with_mock(compare = function() {}, TRUE))$visible)
expect_false(withVisible(with_mock(compare = function() {}, invisible(5)))$visible)
})
test_that("multiple return values", {
local_edition(2)
expect_true(with_mock(FALSE, TRUE, compare = function() {}))
expect_equal(with_mock(3, compare = function() {}, 5), 5)
})
test_that("can access variables defined in function", {
local_edition(2)
x <- 5
expect_equal(with_mock(x, compare = function() {}), 5)
})
test_that("can mock if package is not loaded", {
local_edition(2)
if ("package:curl" %in% search()) {
skip("curl is loaded")
}
skip_if_not_installed("curl")
with_mock(`curl::curl` = identity, expect_identical(curl::curl, identity))
})
test_that("changes to variables are preserved between calls and visible outside", {
local_edition(2)
x <- 1
with_mock(
show_menu = function() {},
x <- 3,
expect_equal(x, 3)
)
expect_equal(x, 3)
})
test_that("mock extraction", {
local_edition(2)
expect_identical(
extract_mocks(list(compare = compare), .env = asNamespace("testthat"))$compare$name,
as.name("compare")
)
expect_error(
extract_mocks(list(..bogus.. = identity), "testthat"),
"Function [.][.]bogus[.][.] not found in environment testthat"
)
expect_equal(
length(extract_mocks(list(not = identity, show_menu = identity), "testthat")),
2
)
})
# local_mock --------------------------------------------------------------
test_that("local_mock operates locally", {
local_edition(2)
f <- function() {
local_mock(compare = function(x, y) FALSE)
compare(1, 1)
}
expect_false(f())
expect_equal(compare(1, 1), no_difference())
})
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.