我想测试一个函数是否返回预期的data.frame。data.frame太大,无法在R文件中定义(例如,使用类似于structure()的东西)。当我尝试从磁盘上进行简单的检索时,我对环境做了一些错误的操作,比如:
test_that("SO example for data.frame retreival", {
path_expected <- "./inst/test_data/project_longitudinal/expected/default.rds"
actual <- data.frame(a=1:5, b=6:10) #saveRDS(actual, file=path_expected)
expected <- readRDS(path_expected)
expect_equal(actual, expected, label="The returned data.frame should be correct")
})在控制台中运行时,行将正确执行。但是,当我运行devtools::test()时,当从文件中读取rds/data.framework时会发生以下错误。
1. Error: All Records -Default ----------------------------------------------------------------
cannot open the connection
1: withCallingHandlers(eval(code, new_test_environment), error = capture_calls, message = function(c) invokeRestart("muffleMessage"),
warning = function(c) invokeRestart("muffleWarning"))
2: eval(code, new_test_environment)
3: eval(expr, envir, enclos)
4: readRDS(path_expected) at test-read_batch_longitudinal.R:59
5: gzfile(file, "rb")要做到这一点,需要对环境进行哪些调整?如果没有一种简单的方法,那么测试大型data.frames的好方法是什么?
发布于 2015-05-03 20:45:08
基于@Gavin的评论,问题并不涉及环境,而是文件路径。改变小片段第二行是有效的。
path_qualified <- base::file.path(
devtools::inst(name="REDCapR"),
test_data/project_longitudinal/expected/dummy.rds"
) 无论是交互式调试还是正在运行的测试(因此inst是否在路径中),都可以找到文件的位置。
发布于 2015-04-23 07:11:28
我建议您检查一下优秀的ensurer包。您可以将这些函数包含在函数本身中(而不是作为testthat测试集的一部分)。如果dataframe (或您想要检查的任何对象)没有满足您的要求,它会抛出一个错误,如果它通过测试,它只会返回该对象。与testthat不同的是,构建ensurer是为了在运行时检查对象,这可能绕过了您所面临的整个环境问题,因为该对象在运行时在函数中进行了测试。请参阅这个小故事的末尾,以了解如何根据模板测试数据格式,模板可以根据您的需要进行详细的测试。您还将发现可以在函数中运行的许多其他测试。在这种情况下,这种方法可能比testthat更可取。
https://stackoverflow.com/questions/29505911
复制相似问题