Я пытаюсь улучшить свое тестовое покрытие и не могу понять, как проверить, вызывается ли .Last.value
при отсутствии x
.
Это упрощенная функция для выдачи ошибки
collapse_text <- function(x) {
if (missing(x)) {
x <- .Last.value
}
paste(x, collapse = "|")
}
collapse_text(letters)
# "a|b|c|d|e|f|g|h|i|j|k|l|m|n|o|p|q|r|s|t|u|v|w|x|y|z"
Насмешка нова для меня, и я над головой. Из документации: .Last.value
is "значение внутренней оценки выражения R верхнего уровня всегда присваивается .Last.value (в package: base) перед дальнейшей обработкой (например, печатью)." Так что, хотя я возвращаю значение перед вызовом функции и могу запускать его построчно в тесте, когда я запускаю его с помощью test_that
, он выдает ошибку.
library(testthat)
library(mockery)
letters # <-------- this is the "last value" that gets called when debugging even though it is outside of the test
test_that(".Last.value used when x is missing", {
values <- letters
paste_mock <- mock()
stub(
where = collapse_text,
what = "paste",
how = paste_mock
)
values # <------ this is the value I am expecting
collapse_text()
expect_args(
mock_object = paste_mock,
n = 1,
x = values
)
})
Некоторые страницы, которыеможет помочь: