Функция тестового пакета, которая пишет на диск - PullRequest
0 голосов
/ 31 октября 2018

Я пытаюсь написать тест для функции пакета в 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 Ответ

0 голосов
/ 31 октября 2018

Похоже, что это нарушает политику CRAN. Почему бы просто не записать во временный каталог, используя

file <-  tempfile()

вместо

file = 'output.txt'

Относительно того, является ли это хорошим тестом: не лучше ли попробовать прочитать файл обратно и подтвердить, что прочитанное соответствует написанному? Это легко в вашем игрушечном примере. В действительности это может быть сложнее, но всегда полезно иметь функцию импорта в сочетании с функцией экспорта.

...