0

関数が期待される 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.frame を読み取るときに次のエラーが発生します。

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 をテストする良い方法は何ですか?

4

2 に答える 2

0

@Gavin Simpson のコメントによると、問題は環境ではなく、ファイル パスに関係していました。スニペットの 2 行目を変更するとうまくいきました。

path_qualified <- base::file.path(
    devtools::inst(name="REDCapR"),
    test_data/project_longitudinal/expected/dummy.rds"
)  

ファイルの場所は、対話的にデバッグしているか、testthat を実行しているか (つまりinst、パス内にあるかどうか) に関係なく見つかります。

于 2015-05-03T20:45:08.163 に答える