Запуск фонового процесса/потока R и т. д. использование текущей среды для модульного тестирования

Сcallr::rи запустить фоновый процесс в чистой среде, они не вписываются в парадигмы модульного тестирования. Модульный тест R, запускаемый через testthat, загружает текущую разрабатываемую версию пакета, но любой фоновый процесс, запущенный модульным тестом — например, API водопроводчика, который можно протестировать — будет использовать системный пакет вместо этого. . Вот немного запутанный вывод, чтобы показать, что я имею в виду:

      > system.file("plumber", "api", "entrypoint.R", package = "DemoPackage")
[1] "/path/to/dev/directory/for/DemoPackage/inst/plumber/api/entrypoint.R"
> callr::r(function() {system.file("plumber", "api", "entrypoint.R", package = "DemoPackage")})
[1] "/home/user_directory/R/x86_64-redhat-linux-gnu-library/3.6/DemoPackage/plumber/api/entrypoint.R"

Вариации вышеперечисленного (передача вывода system.file вplumber::plumb, с использованиемplumber::plumb_apiкаталог и т. д.) все работают примерно одинаково, а это означает, что попытки выполнить модульный тест, который проверяет разрабатываемую версию API, терпят неудачу.

Мой текущий обходной путь состоял в том, чтобы запускать из функции, запускаемойcallr::r_bg, а также пройти вsystem.file(...)путь к функции, чтобы фоновый процесс загружал версию пакета для разработчиков и находил версию для разработчиков скрипта сантехника. Это имеет смешанный успех — оно работает как задумано при запуске модульных тестов, за исключением случаев, когда они запускаютсяdevtools::check()в этом случае возникает ошибка (поскольку рабочий каталог отличается иdevtools::load_all()перерывы).

Каков наилучший способ заставить эту тестовую установку работать? Я предполагаю, что решение будет включать в себя получение каталога или пути к пакету и передачу его callr или передачу среды, но я не уверен, в каком направлении идти.

Обновлять

Снова столкнувшись с этой проблемой, я нашел свой вопрос во время поиска. Новая проблема заключается в том, что я работаю над измерением покрытия юнит-тестами с помощьюcovrpackage, который работает путем изменения объектов в среде для отслеживания использования и поэтому не отслеживает использование в фоновых сеансах. Я не уверен, будет ли надлежащее отслеживание покрытия бесплатным, если запустить фоновый сеанс, наследующий текущую среду (например, статистика покрытия из этого сеанса может не передаваться статистике рабочего сеанса), но это будет по крайней мере один шаг. ближе.

0 ответов

Другие вопросы по тегам