testthat в R: поиск в проверенных файлах

Я использую testthat пакет в R, и я пытаюсь проверить функцию, определенную в файле example.R, Этот файл содержит вызов source("../utilities/utilities.R") где utilities.R это файл с функциями, написанными мной. Тем не менее, когда я пытаюсь проверить функцию из example.Rпоиск в скрипте тестирования приводит к следующей ошибке:

Error in file(filename, "r", encoding = encoding) : 
  cannot open the connection
In addition: Warning message:
In file(filename, "r", encoding = encoding) :
  cannot open file '../utilities/utilities.R': No such file or directory

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

5 ответов

Решение

Может быть, немного поздно, но я нашел решение. Test_that устанавливает каталог, содержащий тестовый файл, в качестве текущего рабочего каталога. Смотрите код ниже из test-files.r. Это заставляет рабочий каталог быть / tests. Таким образом, ваши основные сценарии должны иметь источник ("../file.R"), который работает для тестирования, но не для запуска вашего приложения.

https://github.com/hadley/testthat/blob/master/R/test-files.r

source_dir <- function(path, pattern = "\\.[rR]$", env = test_env(),
                       chdir = TRUE) {
  files <- normalizePath(sort(dir(path, pattern, full.names = TRUE)))
  if (chdir) {
    old <- setwd(path)
    on.exit(setwd(old))
  }

Решение, которое я нашел, состояло в том, чтобы добавить setwd("..") в мои тестовые файлы и просто ввести имя файла без пути. источник ("file.R") вместо источника ("../file.R"). Кажется, работает на меня.

testthat позволяет определять и использовать вспомогательные файлы (см. ?source_test_helpers):

Вспомогательные сценарии - это R-сценарии, сопровождающие тестовые сценарии, но с префиксом helper, Эти сценарии запускаются один раз до запуска тестов.

Поэтому для меня отлично работало просто поместить файл "helper-functions.R", содержащий код, который я хочу получить в "/tests/testthat/". Вам не нужно звонить source_test_helpers() самостоятельно, testthat будет делать это автоматически при запуске тестов (например, через devtools::test() или же testthat::test_dir()).

Может проверить свою орфографию? В вопросе вы используете как "утилиты", так и "утилиты".

Я не нашел отличного решения этой проблемы, до сих пор я устанавливал рабочий каталог в каждом тесте с помощью пакета here.

test_that('working directory is set',{
  setwd(here())
  # test code here
})

я положилsource("C:/Users/.../Utilities.R")в тестовом файле.

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