r - 使用testthat测试函数参数的正确跨平台方法是什么

时间:2016-06-09 07:08:48

标签: r testthat

问题

使用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”")

})

0 个答案:

没有答案