Sam Firke Sam Firke - 3 years ago 111
R Question

Parentheses in error message cause expect_error test to fail

Why doesn't this test pass?

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")


It returns the error message:


Error: error$message does not match "my_fun() must be called on values
of x less than or equal to 1". Actual value: "my_fun() must be called
on values of x less than or equal to 1"


If you remove the
()
from both the function and the test, the test does pass, leading me to think it's something about the parentheses.

Answer Source

In expect_error, you are passing a regular expression, not just a string. Parentheses are special characters in regular expressions and must be escaped. (Parentheses are used for grouping in regular expressions). To handle the parens, just change expect_error to the below:

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

Or more generally, specify fixed = TRUE to test the string as an exact match:

expect_error(my_fun(2),
             "my_fun() must be called on values of x less than or equal to 1",
             fixed = TRUE)
Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download