问题
使用test_that
在不同平台上测试match.arg()
的正确方法是什么?
示例
我正在使用match.arg()
来测试函数的参数是否有效,并使用testthat::test_that()
测试函数。
但是,根据引用字符串使用的操作系统,测试将通过或失败。
考虑这个例子
library(testthat)
myFun <- function(args = c('a','b','c')){
args <- match.arg(args)
return(args)
}
myFun(args = "x")
在Mac上,如果参数不匹配,则会显示错误消息
'arg'应该是“a”,“b”,“c”之一
请注意“ ”
引号。
而在Ubuntu上,错误消息为
'arg'应该是“a”,“b”,“c”之一
请注意" "
引号。
## errors on Mac, works on Ubuntu
test_that("quoted string returned",{
expect_error(myFun(args = c("x")),
"'arg' should be one of \"a\", \"b\", \"c\"")
})
# Error: Test failed: 'quoted string returned'
# * error$message does not match "'arg' should be one of \"a\", \"b\", \"c\"".
# Actual value: "'arg' should be one of “a”, “b”, “c”"
## works on Mac, fails on Ubuntu
test_that("quoted string returned",{
expect_error(myFun(args = c("x")),
"'arg' should be one of “a”, “b”, “c”")
})