Как использовать testthat для .Last.Value - PullRequest
0 голосов
/ 10 октября 2019

Я пытаюсь улучшить свое тестовое покрытие и не могу понять, как проверить, вызывается ли .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
  )
})

Некоторые страницы, которыеможет помочь:

...