Где разместить вызовы библиотеки с 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...
})
  1. Так ли это @hadley намеревался использовать? Это не ясно из статьи журнала. Должен ли я также дублировать библиотечные вызовы в моих тестовых файлах? Вам нужна библиотека, настроенная в каждом контексте, или только одна в начале файла?

  2. Можно ли перебрать библиотеку (пакет) в r?

  3. Чтобы использовать 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 папка.

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