Функция тестового пакета, которая пишет на диск
Я пытаюсь написать тест для функции пакета в R.
Допустим, у нас есть функция, которая просто пишет строку x
на диск с помощью writeLines()
:
exporting_function <- function(x, file) {
writeLines(x, con = file)
invisible(NULL)
}
Одним из способов проверки было бы проверить, существует ли файл. Как правило, он не должен существовать вначале, но после запуска функции экспорта он должен. Кроме того, вы можете проверить размер файла больше 0:
library(testthat)
test_that("file is written to disk", {
file = 'output.txt'
expect_false(file.exists(file))
exporting_function("This is a test",
file = file)
expect_true(file.exists(file))
expect_gt(file.info('output.txt')$size, 0)
})
Это хороший способ проверить это? В политике хранилища CRAN говорится, что Packages should not write in the user’s home filespace (including clipboards), nor anywhere else on the file system apart from the R session’s temporary directory
, Будет ли этот тест нарушать это ограничение?
Есть функция wait_output_file. Из документации и примеров я не уверен, что это более подходящее ожидание для проверки функции. Это требует object
аргумент, который должен быть object to test
, Что является объектом для тестирования в моем случае?
1 ответ
Это выглядит так, как будто это нарушает политику CRAN. Почему бы просто не написать во временный каталог, используя
file <- tempfile()
на месте
file = 'output.txt'
?
Относительно того, является ли это хорошим тестом: не лучше ли попробовать прочитать файл обратно и подтвердить, что прочитанное соответствует написанному? Это легко в вашем игрушечном примере. В действительности это может быть сложнее, но всегда полезно иметь функцию импорта в сочетании с функцией экспорта.