为什么这个测试没有通过?
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;
如果从功能和测试中删除()
,测试会通过,这会让我认为它是关于括号的。
答案 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)