Где разместить вызовы библиотеки с testthat?
Я ищу лучшую практику помощи с блестящим testthat
, Где лучшее место для размещения library(xyzpackage)
призывает использовать все функциональные возможности пакета?
Я сначала настраивал runtest.R
настройка путей и пакетов. Тогда я бегу test_files(test-code.R)
который содержит только контекст и тесты. Пример для структуры следующий:
# runtests.R
library(testthat)
library(data.table)
source("code/plotdata-fun.R")
mytestreport <- test_file("code/test-plotdata.R")
# does other stuff like append date and log test report (not shown)
и в моих тестовых файлах, например, test-plotdata.R
(урезанная версия):
#my tests for plotdata
context("Plot Chart")
test_that("Inputs valid", {
test.dt = data.table(px = c(1,2,3), py = c(1,4,9))
test.notdt <- c(1,2,3)
# illustrating the check for data table as first param in my code
expect_error(PlotMyStandardChart(test.notdt,
plot.me = FALSE),
"Argument must be data table/frame")
# then do other tests with test.dt etc...
})
Так ли это @hadley намеревался использовать? Это не ясно из статьи журнала. Должен ли я также дублировать библиотечные вызовы в моих тестовых файлах? Вам нужна библиотека, настроенная в каждом контексте, или только одна в начале файла?
Можно ли перебрать библиотеку (пакет) в r?
Чтобы использовать
test_dir()
и другие функциональные возможности, что является лучшим способом для настройки ваших файлов. Я использую require() в своих функциях, но я также настраивал примеры тестовых данных в контексте. (В приведенном выше примере вы увидите, что мне нужен пакет data.table для test.dt для использования в других тестах).
Спасибо за вашу помощь.
2 ответа
Некоторые предложения / комментарии:
- настроить каждый файл так, чтобы он мог запускаться самостоятельно с
test_file
без дополнительной настройки. Таким образом, вы можете легко запускать отдельный файл во время разработки, если сосредоточитесь только на одной небольшой части большого проекта (полезно, если все ваши тесты выполняются медленно). - есть небольшое наказание за звонок
library
несколько раз, так как эта функция сначала проверяет, подключен ли пакет - если вы настроите каждый файл так, чтобы он мог быть запущен с
test_file
, затемtest_dir
будет работать без необходимости делать что-либо дополнительное - тебе не нужно
library(testthat)
в любом из ваших тестовых файлов, так как, по-видимому, вы запускаете их сtest_file
или жеtest_dir
, что потребуетtestthat
быть загруженным
Кроме того, вы можете просто посмотреть на один из последних пакетов Хэдли, чтобы увидеть, как он это делает (например, dplyr
тесты).
Если вы используете devtools::test(filter="mytestfile")
тогда devtools позаботится о вызове вспомогательных файлов и т.д. для вас. Таким образом, вам не нужно делать ничего особенного, чтобы ваш тестовый файл работал сам по себе. По сути, это так же, как если бы вы запустили тест, но только test_mytestfile.R
в вашем testthat
папка.