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")
в тестовом файле.