2

编辑:

是否有可能~/.Rprofile没有加载在check(). 看起来我的整个过程都失败了,因为~/.Rprofile没有加载。

完成编辑

我在使用testthat. 实际上,当我测试我的包时test()一切正常。但是当我测试时,check()我收到一条错误消息。

错误消息说:

1. Failure (at test_DML_create_folder_start_MQ_script.R#43): DML create folder start MQ Script works with "../DML_IC_MQ_DATA/dummy_data" data 
  capture.output(messages <- source(basename(script_file))) threw an error

  Error in sprintf("%s folder got created for each raw file.", subfolder_prefix) : 
    object 'subfolder_prefix' not found

在此错误之前,我获取了一个定义subfolder_prefix变量的脚本,我想这就是它在这种test()情况下工作的原因。但我希望它也能在check()函数中运行。

我会把完整的测试脚本贴在这里,希望不要太复杂:

library(testthat)
context("testing DML create folder and start MQ script")
test_dir <- 'dml_ic_mq_test'
start_dir <- getwd()

# list of test file folders
data_folders <- list.dirs('../DML_IC_MQ_DATA', recursive=FALSE)

for(folder in data_folders) { # for each folder with test files
  dir.create(test_dir)
  setwd(test_dir)

  script_file <- a.DML_prepare_IC.script(dbg_level=Inf) # returns filename I will source 

  test_that(sprintf('we could copy all files from "%s".', 
                    folder), {
                      expect_that(
                        all(file.copy(list.files(file.path('..',folder), full.names=TRUE), 
                                      '.', 
                                      recursive=TRUE)), 
                        is_true())
                    })
  test_that(sprintf('DML create folder start MQ Script works with "%s" data', folder), {
    expect_that(capture.output(messages <- source(basename(script_file))), 
                not(throws_error()))
  }) 
  count_rawfiles <- length(list.files(pattern='.raw$'))
  created_folders <- list.dirs(recursive=FALSE)
  test_that(sprintf('%s folder got created for each raw file.',
                    subfolder_prefix), {
                      expect_equal(length(grep(subfolder_prefix, created_folders)),
                                   count_rawfiles)
                    })
  setwd(start_dir)  
  unlink(test_dir, recursive=TRUE)
}

在我的脚本中,我定义了变量subfolder_prefix <- 'IC_',并在测试中检查是否为每个原始文件创建了相同数量的文件夹......这就是我的脚本应该做的......

所以正如我所说,我不确定如何在这里调试这个问题,因为test()工作但check()在运行测试期间失败。

4

1 回答 1

2

现在我知道去看看devtools我们可以找到答案。根据文档check“使用所有已知的最佳实践自动构建和检查源包”。这包括忽略 .Rprofile。它看起来像check调用build,所有这些工作都是在一个单独的(干净的)R 会话中完成的。相比之下test,似乎使用您当前正在运行的会话(在新环境中)。

于 2015-12-01T20:40:20.257 回答