R тест, который перезаписывает внутренние базовые функции - PullRequest
0 голосов
/ 21 марта 2019

Я пишу пакет, который сравнивает запрошенные пакеты с доступными пакетами.То есть я могу запросить «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') чтобы увидеть, изменит ли это путь поиска на месте.Никаких костей.

Есть ли способ, которым я могу, не добавляя дополнительных входов в мои функции, контролировать то, что мои функции видят как установленные в данный момент пакеты только для целей тестирования?

...