2017-09-29 6 views
1

왜이 테스트를 통과하지 못합니까?오류 메시지의 괄호로 인해 expect_error 테스트가 실패합니다.

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

그것은 오류 메시지를 반환합니다

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"

당신은 기능과 테스트 모두에서 ()을 제거하면, 테스트 가 괄호에 대해 뭔가 생각하는 저를 선도 패스를한다.

답변

3

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)