Я пишу пакет, который сравнивает запрошенные пакеты с доступными пакетами.То есть я могу запросить «mgsub == 1.5.0» и узнать, установлена ли у меня эта версия пакета, прежде чем предпринимать какие-либо действия.Я определяю уже установленные пакеты, глядя на installed.packages()[,3]
Я пытаюсь быть хорошим разработчиком и пишу юнит-тесты.Хотя я могу контролировать, какие пакеты я хочу установить, я не могу контролировать, какие пакеты уже установлены.Итак, мне нужен способ, только для целей тестирования, перезаписать то, что выходит из installed.packages()
.Сначала я думал добавить этот код в начало модульных тестов, чтобы обойти его.
installed.packages <- function(){return(INST)}
INST = structure(c("mgsub", "lexRankr", "readOffice",
"lib1", "lib1", "lib1",
"1.5.1.3", "0.4.1", "0.2.2"),
.Dim = c(3L, 3L),
.Dimnames = list(c("mgsub", "lexRankr", "readOffice"),
c("Package", "LibPath", "Version")))
Но это не работает.testthat продолжает использовать мой фактический список установленных пакетов вместо этого набора.
Я пытался использовать testthat::setup
для инициализации функции, но это тоже не сработало.
Я пытался expect_is(installed.packages <- function(){return(INST)},'function')
чтобы увидеть, изменит ли это путь поиска на месте.Никаких костей.
Есть ли способ, которым я могу, не добавляя дополнительных входов в мои функции, контролировать то, что мои функции видят как установленные в данный момент пакеты только для целей тестирования?