^
および$
アンカーを使用して、文字列がパターンで開始および終了する必要があることを示すことができます。
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$")
正規表現のメタ文字、つまり. \ | ( ) [ { ^ $ * + ?
はエスケープする必要があることに注意してください。
または、フリック氏の回答hereから借りて、メッセージを文字列に変換してから、、などを使用することもでき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