Kot*_*ori 3 r readline testthat r-package
我正在开发一个R包,其中一个功能是通过的标准输入来实现与用户的交互readline。我现在想知道如何测试此功能的行为,最好是使用testthat库。
似乎test_that函数假定答案是""用户输入的。我希望我可以测试用户可以输入的各种答案的行为条件。
下面是一个小的示例代码。在实际开发中,该marryme函数在单独的文件中定义,并导出到名称空间。
devtools::test()在最后一行让我出错,因为答案永远不会是。我想测试用户输入时函数是否正确返回true "y"。
library(testthat)
test_that("input", {
marryme <- function() {
ans <- readline("will you marry me? (y/n) > ")
return(ans == "y")
}
expect_false(marryme()) # this is good
expect_true(marryme()) # this is no good
})
Run Code Online (Sandbox Code Playgroud)
通过使用readLines()代替readline(),您可以定义连接,使用全局选项可以自定义连接。
您需要执行两个步骤:
在包中设置一个默认选项zzz.R,指向stdin:
.onAttach <- function(libname, pkgname){
options(mypkg.connection = stdin())
}
Run Code Online (Sandbox Code Playgroud)在您的功能中,更改readline为readLines(n = 1)并将连接设置readLines()为getOption("mypkg.connection")
根据您的MWE:
.onAttach <- function(libname, pkgname){
options(mypkg.connection = stdin())
}
Run Code Online (Sandbox Code Playgroud)