由于 ~/.Rprofile,check() 上的 testthat 错误而不是 test() 上的错误?
testthat error on check() but not on test() because of ~/.Rprofile?
编辑:
是否有可能 ~/.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()
函数中也能得到这个 运行ning。
我将post完整的测试脚本放在这里,希望不要太复杂:
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()
在 运行.
测试期间失败
现在我知道要查看 devtools
我们可以找到答案。根据文档 check
"automatically builds and checks a source package, using all known best practices"。这包括忽略 .Rprofile。看起来 check
调用 build
并且所有这些工作都是在一个单独的(干净的)R 会话中完成的。相反,test
似乎使用您当前的 运行 会话(在新环境中)。
编辑:
是否有可能 ~/.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()
函数中也能得到这个 运行ning。
我将post完整的测试脚本放在这里,希望不要太复杂:
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()
在 运行.
现在我知道要查看 devtools
我们可以找到答案。根据文档 check
"automatically builds and checks a source package, using all known best practices"。这包括忽略 .Rprofile。看起来 check
调用 build
并且所有这些工作都是在一个单独的(干净的)R 会话中完成的。相反,test
似乎使用您当前的 运行 会话(在新环境中)。