Does code return an object inheriting from the expected base type, S3 class, or S4 class?
Source:R/expect-inheritance.R
inheritance-expectations.Rd
See https://adv-r.hadley.nz/oo.html for an overview of R's OO systems, and the vocabulary used here.
expect_type(x, type)
checks thattypeof(x)
istype
.expect_s3_class(x, class)
checks thatx
is an S3 object thatinherits()
fromclass
expect_s3_class(x, NA)
checks thatx
isn't an S3 object.expect_s4_class(x, class)
checks thatx
is an S4 object thatis()
class
.expect_s4_class(x, NA)
checks thatx
isn't an S4 object.
See expect_vector()
for testing properties of objects created by vctrs.
Usage
expect_type(object, type)
expect_s3_class(object, class, exact = FALSE)
expect_s4_class(object, class)
Arguments
- object
Object to test.
Supports limited unquoting to make it easier to generate readable failures within a function or for loop. See quasi_label for more details.
- type
String giving base type (as returned by
typeof()
).- class
Either a character vector of class names, or for
expect_s3_class()
andexpect_s4_class()
, anNA
to assert thatobject
isn't an S3 or S4 object.- exact
If
FALSE
, the default, checks thatobject
inherits fromclass
. IfTRUE
, checks that object has a class that's identical toclass
.
See also
Other expectations:
comparison-expectations
,
equality-expectations
,
expect_error()
,
expect_length()
,
expect_match()
,
expect_named()
,
expect_null()
,
expect_output()
,
expect_reference()
,
expect_silent()
,
logical-expectations
Examples
x <- data.frame(x = 1:10, y = "x", stringsAsFactors = TRUE)
# A data frame is an S3 object with class data.frame
expect_s3_class(x, "data.frame")
show_failure(expect_s4_class(x, "data.frame"))
#> Failed expectation:
#> `x` is not an S4 object
# A data frame is built from a list:
expect_type(x, "list")
# An integer vector is an atomic vector of type "integer"
expect_type(x$x, "integer")
# It is not an S3 object
show_failure(expect_s3_class(x$x, "integer"))
#> Failed expectation:
#> x$x is not an S3 object
# Above, we requested data.frame() converts strings to factors:
show_failure(expect_type(x$y, "character"))
#> Failed expectation:
#> x$y has type 'integer', not 'character'.
expect_s3_class(x$y, "factor")
expect_type(x$y, "integer")