您可以使用^
和$
锚点来指示字符串必须以您的模式开始和结束。
expect_message(good(), "^Hello\\n$")
expect_message(bad(), "^Hello\\n$")
#Error: bad() does not match '^Hello\n$'. Actual value: "Hello!!!!!\n"
\\n
需要匹配添加的新行message
。
对于警告,它有点简单,因为没有换行符:
expect_warning(warning("Hello"), "^Hello$")
对于错误,它有点难:
good_stop <- function() stop("Hello")
expect_error(good_stop(), "^Error in good_stop\\(\\) : Hello\n$")
请注意,任何正则表达式元字符,即. \ | ( ) [ { ^ $ * + ?
,都需要转义。
或者,借用弗里克先生在这里的回答,您可以将消息转换为字符串,然后使用expect_true
,expect_identical
等。
messageToText <- function(expr) {
con <- textConnection("messages", "w")
sink(con, type="message")
eval(expr)
sink(NULL, type="message")
close(con)
messages
}
expect_identical(messageToText(good()), "Hello")
expect_identical(messageToText(bad()), "Hello")
#Error: messageToText(bad()) is not identical to "Hello". Differences: 1 string mismatch