错误消息中的括号会导致expect_error测试失败

时间:2017-09-29 17:34:03

标签: r testthat

为什么这个测试没有通过?

my_fun <- function(x){
  if(x > 1){stop("my_fun() must be called on values of x less than or equal to 1")}
  x
}

library(testthat)
expect_error(my_fun(2),
             "my_fun() must be called on values of x less than or equal to 1")

它返回错误消息:

  

错误:错误$ message不匹配&#34;必须在值上调用my_fun()   x小于或等于1&#34;。实际值:&#34;必须调用my_fun()   on x的值小于或等于1&#34;

如果从功能和测试中删除(),测试通过,这会让我认为它是关于括号的。

1 个答案:

答案 0 :(得分:4)

expect_error中,您传递的是正则表达式,而不仅仅是字符串。括号是正则表达式中的特殊字符,必须进行转义。 (括号用于在正则表达式中分组)。要处理问题,只需将expect_error更改为以下内容:

expect_error(my_fun(2),
             "my_fun\\(\\) must be called on values of x less than or equal to 1")

或者更一般地,指定fixed = TRUE以将字符串测试为完全匹配:

expect_error(my_fun(2),
             "my_fun() must be called on values of x less than or equal to 1",
             fixed = TRUE)