I'm looking to unit test a function that produces a connection. It outputs a message that contains the connection details during execution.
I want to test the following:
- The message appears as expected (
expect_message(fn(),"blah")
) - There is no error (
expect_error(fn(),NA)
) - Object created is a specific class (
expect_is(fn(),"PostgreSQLConnection")
)
I could do res<-fn()
and then do the expect_is()
from it, but how can I perform tests on both the message and the (lack of an) error whilst calling the function.
Ideally, I'd like to evaluate all three simultaneously and in such a way I could then safely close the connection afterwards.
library(testthat)
fn<-function(){
message("blah")
obj<-"blah"
class(obj)<-c("PostgreSQLConnection",class(obj))
return(obj)
}
expect_message(fn(),"blah")
expect_error(fn(),NA)
expect_is(fn(),"PostgreSQLConnection")
PS The expect_message
and expect_error
functions use functions like throws_error
which may or may not be deprecated- the docs are a little confusing on that point. ?throws_error