我正在 R 中使用以下命令运行测试test_dir()
函数从testthat
包裹。在一些测试脚本中,有一些函数调用readline()
,这在交互模式下会导致测试暂停并等待用户输入。调用的函数readline()
不是我自己的,我对他们没有任何影响。用户输入与这些函数的输出无关。
有没有办法避免测试过程中的这些暂停?
想到的方法,但我不知道如何实施:
- R 运行时禁用交互模式
- 使用另一个函数
testthat
以非交互模式运行脚本的包
- 以某种方式转移
stdin
到终端以外的其他地方(??)
- 包装函数调用
readline()
在另一个脚本中,该脚本从我的测试脚本以非交互模式调用并使结果可用
仅使用命令行进行测试Rscript
是一个选项,但我宁愿留在 RStudio 工作流程中。
======
示例代码
with_pause <- function () {
readline()
2
}
without_pause <- function () {
2
}
expect_equal(with_pause(), without_pause())
我有一个类似的问题。我通过全局选项设置解决了这个问题。
original_test_mode <- getOption('my_package.test_mode')
options('my_package.test_mode' = TRUE)
# ... some tests ...
options('my_package.test_mode' = original_test_mode)
在我的脚本中我有一个if
陈述
if(getOption('my_package.test_mode', FALSE)) {
# This happens in test mode
my_value <- 5
} else {
# normal processing
my_value <- readline('please write value: ')
}
也不是最好的方法,但它对我有用。
也许还有一个提示。碰巧我的测试脚本失败了。这里的问题是,全局选项仍然存在TRUE
并且在下一轮中以及在同一会话中执行脚本时,它永远不会提示您写入值。我想我应该把一些东西放进去tryCatch
功能左右。但如果你心里有这个问题,就“有时”options('my_package.test_mode', NULL)
有帮助:-)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)