Sam Firke - 3 years ago 111

R Question

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

`()`

Recommended for you: Get network issues from **WhatsUp Gold**. **Not end users.**

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**