ARROW-11752: [R] Replace usage of testthat::expect_is()

`testthat::expect_is` is now deprecated - this PR replaces uses of it with alternative functions.  When updating `expect_dplyr_error`, I fixed an issue with its usage which led to one of the tests failing as it no longer gives the expected error, so have set this test to skip.

Closes #9909 from thisisnic/arrow-11752

Lead-authored-by: Nic Crane <thisisnic@gmail.com>
Co-authored-by: Nic <thisisnic@gmail.com>
Signed-off-by: Krisztián Szűcs <szucs.krisztian@gmail.com>
diff --git a/r/tests/testthat/helper-expectation.R b/r/tests/testthat/helper-expectation.R
index 39cc9e0..2ebd44f 100644
--- a/r/tests/testthat/helper-expectation.R
+++ b/r/tests/testthat/helper-expectation.R
@@ -23,6 +23,11 @@
   expect_equal(as.data.frame(x), y, ...)
 }
 
+expect_r6_class <- function(object, class){
+  expect_s3_class(object, class)
+  expect_s3_class(object, "R6")
+}
+
 expect_equivalent <- function(object, expected, ...) {
   # HACK: dplyr includes an all.equal.tbl_df method that is causing failures.
   # They look spurious, like:
@@ -98,12 +103,35 @@
 expect_dplyr_error <- function(expr, # A dplyr pipeline with `input` as its start
                                tbl,  # A tbl/df as reference, will make RB/Table with
                                ...) {
+  # ensure we have supplied tbl
+  force(tbl)
+  
   expr <- rlang::enquo(expr)
   msg <- tryCatch(
     rlang::eval_tidy(expr, rlang::new_data_mask(rlang::env(input = tbl))),
-    error = function (e) conditionMessage(e)
+    error = function (e) {
+      msg <- conditionMessage(e)
+
+      # The error here is of the form:
+      #
+      # Problem with `filter()` input `..1`.
+      # x object 'b_var' not found
+      # ℹ Input `..1` is `chr == b_var`.
+      #
+      # but what we really care about is the `x` block
+      # so (temporarily) let's pull those blocks out when we find them
+      pattern <- i18ize_error_messages()
+      
+      if (grepl(pattern, msg)) {
+        msg <- sub(paste0("^.*(", pattern, ").*$"), "\\1", msg)
+      }
+      msg
+    }
   )
-  expect_is(msg, "character", label = "dplyr on data.frame did not error")
+  # make sure msg is a character object (i.e. there has been an error)
+  # If it did not error, we would get a data.frame or whatever
+  # This expectation will tell us "dplyr on data.frame errored is not TRUE"
+  expect_true(identical(typeof(msg), "character"), label = "dplyr on data.frame errored")
 
   expect_error(
     rlang::eval_tidy(
diff --git a/r/tests/testthat/test-Array.R b/r/tests/testthat/test-Array.R
index 35ae357..b4fa829 100644
--- a/r/tests/testthat/test-Array.R
+++ b/r/tests/testthat/test-Array.R
@@ -496,7 +496,7 @@
 
 test_that("Array$create() handles vector -> list arrays (ARROW-7662)", {
   # Should be able to create an empty list with a type hint.
-  expect_is(Array$create(list(), list_of(bool())), "ListArray")
+  expect_r6_class(Array$create(list(), list_of(bool())), "ListArray")
 
   # logical
   expect_array_roundtrip(list(NA), list_of(bool()))
@@ -542,7 +542,7 @@
 
 test_that("Array$create() handles vector -> large list arrays", {
   # Should be able to create an empty list with a type hint.
-  expect_is(Array$create(list(), type = large_list_of(bool())), "LargeListArray")
+  expect_r6_class(Array$create(list(), type = large_list_of(bool())), "LargeListArray")
 
   # logical
   expect_array_roundtrip(list(NA), large_list_of(bool()), as = large_list_of(bool()))
@@ -587,7 +587,7 @@
 
 test_that("Array$create() handles vector -> fixed size list arrays", {
   # Should be able to create an empty list with a type hint.
-  expect_is(Array$create(list(), type = fixed_size_list_of(bool(), 20)), "FixedSizeListArray")
+  expect_r6_class(Array$create(list(), type = fixed_size_list_of(bool(), 20)), "FixedSizeListArray")
 
   # logical
   expect_array_roundtrip(list(NA), fixed_size_list_of(bool(), 1L), as = fixed_size_list_of(bool(), 1L))
diff --git a/r/tests/testthat/test-RecordBatch.R b/r/tests/testthat/test-RecordBatch.R
index b71c07b..ff7f17e 100644
--- a/r/tests/testthat/test-RecordBatch.R
+++ b/r/tests/testthat/test-RecordBatch.R
@@ -438,8 +438,8 @@
   rb1 <- record_batch(df)
   rb2 <- record_batch(df, schema = rb1$schema$WithMetadata(list(some="metadata")))
 
-  expect_is(rb1, "RecordBatch")
-  expect_is(rb2, "RecordBatch")
+  expect_r6_class(rb1, "RecordBatch")
+  expect_r6_class(rb2, "RecordBatch")
   expect_false(rb1$schema$HasMetadata)
   expect_true(rb2$schema$HasMetadata)
   expect_identical(rb2$schema$metadata, list(some = "metadata"))
diff --git a/r/tests/testthat/test-Table.R b/r/tests/testthat/test-Table.R
index 7a0b8bd..86bda39 100644
--- a/r/tests/testthat/test-Table.R
+++ b/r/tests/testthat/test-Table.R
@@ -299,7 +299,7 @@
   tab <- Table$create(tbl)
 
   expect_identical(dim(tbl), dim(tab))
-  expect_is(tab$columns, "list")
+  expect_type(tab$columns, "list")
   expect_equal(tab$columns[[1]], tab[[1]])
 })
 
@@ -400,8 +400,8 @@
   tab2 <- Table$create(x = 1:2, y = c("a", "b"),
                        schema = tab1$schema$WithMetadata(list(some="metadata")))
 
-  expect_is(tab1, "Table")
-  expect_is(tab2, "Table")
+  expect_r6_class(tab1, "Table")
+  expect_r6_class(tab2, "Table")
   expect_false(tab1$schema$HasMetadata)
   expect_true(tab2$schema$HasMetadata)
   expect_identical(tab2$schema$metadata, list(some = "metadata"))
diff --git a/r/tests/testthat/test-arrow-info.R b/r/tests/testthat/test-arrow-info.R
index 2a7af3a..3fac3f4 100644
--- a/r/tests/testthat/test-arrow-info.R
+++ b/r/tests/testthat/test-arrow-info.R
@@ -16,7 +16,7 @@
 # under the License.
 
 test_that("arrow_info()", {
-  expect_is(arrow_info(), "arrow_info")
+  expect_s3_class(arrow_info(), "arrow_info")
   expect_output(print(arrow_info()), "Arrow package version")
   options(arrow.foo=FALSE)
   expect_output(print(arrow_info()), "arrow.foo")
diff --git a/r/tests/testthat/test-buffer-reader.R b/r/tests/testthat/test-buffer-reader.R
index 94be16a..3236a3a 100644
--- a/r/tests/testthat/test-buffer-reader.R
+++ b/r/tests/testthat/test-buffer-reader.R
@@ -22,9 +22,9 @@
   int <- BufferReader$create(integer(13))
   raw <- BufferReader$create(raw(16))
 
-  expect_is(num, "BufferReader")
-  expect_is(int, "BufferReader")
-  expect_is(raw, "BufferReader")
+  expect_r6_class(num, "BufferReader")
+  expect_r6_class(int, "BufferReader")
+  expect_r6_class(raw, "BufferReader")
 
   expect_equal(num$GetSize(), 13*8)
   expect_equal(int$GetSize(), 13*4)
@@ -35,6 +35,6 @@
   buf <- buffer(raw(76))
   reader <- BufferReader$create(buf)
 
-  expect_is(reader, "BufferReader")
+  expect_r6_class(reader, "BufferReader")
   expect_equal(reader$GetSize(), 76)
 })
diff --git a/r/tests/testthat/test-buffer.R b/r/tests/testthat/test-buffer.R
index c19f611..1b3ea09 100644
--- a/r/tests/testthat/test-buffer.R
+++ b/r/tests/testthat/test-buffer.R
@@ -20,33 +20,33 @@
 test_that("Buffer can be created from raw vector", {
   vec <- raw(123)
   buf <- buffer(vec)
-  expect_is(buf, "Buffer")
+  expect_r6_class(buf, "Buffer")
   expect_equal(buf$size, 123)
 })
 
 test_that("Buffer can be created from integer vector", {
   vec <- integer(17)
   buf <- buffer(vec)
-  expect_is(buf, "Buffer")
+  expect_r6_class(buf, "Buffer")
   expect_equal(buf$size, 17 * 4)
 })
 
 test_that("Buffer can be created from numeric vector", {
   vec <- numeric(17)
   buf <- buffer(vec)
-  expect_is(buf, "Buffer")
+  expect_r6_class(buf, "Buffer")
   expect_equal(buf$size, 17 * 8)
 })
 
 test_that("Buffer can be created from complex vector", {
   vec <- complex(3)
   buf <- buffer(vec)
-  expect_is(buf, "Buffer")
+  expect_r6_class(buf, "Buffer")
   expect_equal(buf$size, 3 * 16)
 })
 
 test_that("buffer buffer buffers buffers", {
-  expect_is(buffer(buffer(42)), "Buffer")
+  expect_r6_class(buffer(buffer(42)), "Buffer")
 })
 
 test_that("Other types can't be converted to Buffers", {
diff --git a/r/tests/testthat/test-chunked-array.R b/r/tests/testthat/test-chunked-array.R
index 17a82de..e72067a 100644
--- a/r/tests/testthat/test-chunked-array.R
+++ b/r/tests/testthat/test-chunked-array.R
@@ -177,7 +177,7 @@
   expect_type_equal(zero, int64())
   ca <- ChunkedArray$create(zero, x)
   expect_type_equal(ca, int64())
-  expect_is(as.vector(ca), "integer64")
+  expect_s3_class(as.vector(ca), "integer64")
   expect_identical(as.vector(ca), c(bit64::as.integer64(0L), x))
 })
 
@@ -199,12 +199,12 @@
   a <- chunked_array(1:10, 1:10)
   for (type in c(int_types, uint_types)) {
     casted <- a$cast(type)
-    expect_is(casted, "ChunkedArray")
+    expect_r6_class(casted, "ChunkedArray")
     expect_type_equal(casted$type, type)
   }
   # Also test casting to double(), not actually a type, a base R function but should be alias for float64
   dbl <- a$cast(double())
-  expect_is(dbl, "ChunkedArray")
+  expect_r6_class(dbl, "ChunkedArray")
   expect_type_equal(dbl$type, float64())
 })
 
diff --git a/r/tests/testthat/test-compute-aggregate.R b/r/tests/testthat/test-compute-aggregate.R
index 2208f58..7701057 100644
--- a/r/tests/testthat/test-compute-aggregate.R
+++ b/r/tests/testthat/test-compute-aggregate.R
@@ -28,7 +28,7 @@
 test_that("sum.Array", {
   ints <- 1:5
   a <- Array$create(ints)
-  expect_is(sum(a), "Scalar")
+  expect_r6_class(sum(a), "Scalar")
   expect_identical(as.integer(sum(a)), sum(ints))
 
   floats <- c(1.3, 2.4, 3)
@@ -38,7 +38,7 @@
   floats <- c(floats, NA)
   na <- Array$create(floats)
   expect_identical(as.numeric(sum(na)), sum(floats))
-  expect_is(sum(na, na.rm = TRUE), "Scalar")
+  expect_r6_class(sum(na, na.rm = TRUE), "Scalar")
   expect_identical(as.numeric(sum(na, na.rm = TRUE)), sum(floats, na.rm = TRUE))
 
   bools <- c(TRUE, NA, TRUE, FALSE)
@@ -49,7 +49,7 @@
 
 test_that("sum.ChunkedArray", {
   a <- ChunkedArray$create(1:4, c(1:4, NA), 1:5)
-  expect_is(sum(a), "Scalar")
+  expect_r6_class(sum(a), "Scalar")
   expect_true(is.na(as.vector(sum(a))))
   expect_identical(as.numeric(sum(a, na.rm = TRUE)), 35)
 })
@@ -69,7 +69,7 @@
 test_that("mean.Array", {
   ints <- 1:4
   a <- Array$create(ints)
-  expect_is(mean(a), "Scalar")
+  expect_r6_class(mean(a), "Scalar")
   expect_identical(as.vector(mean(a)), mean(ints))
 
   floats <- c(1.3, 2.4, 3)
@@ -79,7 +79,7 @@
   floats <- c(floats, NA)
   na <- Array$create(floats)
   expect_identical(as.vector(mean(na)), mean(floats))
-  expect_is(mean(na, na.rm = TRUE), "Scalar")
+  expect_r6_class(mean(na, na.rm = TRUE), "Scalar")
   expect_identical(as.vector(mean(na, na.rm = TRUE)), mean(floats, na.rm = TRUE))
 
   bools <- c(TRUE, NA, TRUE, FALSE)
@@ -90,7 +90,7 @@
 
 test_that("mean.ChunkedArray", {
   a <- ChunkedArray$create(1:4, c(1:4, NA), 1:5)
-  expect_is(mean(a), "Scalar")
+  expect_r6_class(mean(a), "Scalar")
   expect_true(is.na(as.vector(mean(a))))
   expect_identical(as.vector(mean(a, na.rm = TRUE)), 35/13)
 })
@@ -111,7 +111,7 @@
 test_that("min.Array", {
   ints <- 1:4
   a <- Array$create(ints)
-  expect_is(min(a), "Scalar")
+  expect_r6_class(min(a), "Scalar")
   expect_identical(as.vector(min(a)), min(ints))
 
   floats <- c(1.3, 3, 2.4)
@@ -121,7 +121,7 @@
   floats <- c(floats, NA)
   na <- Array$create(floats)
   expect_identical(as.vector(min(na)), min(floats))
-  expect_is(min(na, na.rm = TRUE), "Scalar")
+  expect_r6_class(min(na, na.rm = TRUE), "Scalar")
   expect_identical(as.vector(min(na, na.rm = TRUE)), min(floats, na.rm = TRUE))
 
   bools <- c(TRUE, TRUE, FALSE)
@@ -133,7 +133,7 @@
 test_that("max.Array", {
   ints <- 1:4
   a <- Array$create(ints)
-  expect_is(max(a), "Scalar")
+  expect_r6_class(max(a), "Scalar")
   expect_identical(as.vector(max(a)), max(ints))
 
   floats <- c(1.3, 3, 2.4)
@@ -143,7 +143,7 @@
   floats <- c(floats, NA)
   na <- Array$create(floats)
   expect_identical(as.vector(max(na)), max(floats))
-  expect_is(max(na, na.rm = TRUE), "Scalar")
+  expect_r6_class(max(na, na.rm = TRUE), "Scalar")
   expect_identical(as.vector(max(na, na.rm = TRUE)), max(floats, na.rm = TRUE))
 
   bools <- c(TRUE, TRUE, FALSE)
@@ -155,7 +155,7 @@
 test_that("min.ChunkedArray", {
   ints <- 1:4
   a <- ChunkedArray$create(ints)
-  expect_is(min(a), "Scalar")
+  expect_r6_class(min(a), "Scalar")
   expect_identical(as.vector(min(a)), min(ints))
 
   floats <- c(1.3, 3, 2.4)
@@ -165,7 +165,7 @@
   floats <- c(floats, NA)
   na <- ChunkedArray$create(floats)
   expect_identical(as.vector(min(na)), min(floats))
-  expect_is(min(na, na.rm = TRUE), "Scalar")
+  expect_r6_class(min(na, na.rm = TRUE), "Scalar")
   expect_identical(as.vector(min(na, na.rm = TRUE)), min(floats, na.rm = TRUE))
 
   bools <- c(TRUE, TRUE, FALSE)
@@ -177,7 +177,7 @@
 test_that("max.ChunkedArray", {
   ints <- 1:4
   a <- ChunkedArray$create(ints)
-  expect_is(max(a), "Scalar")
+  expect_r6_class(max(a), "Scalar")
   expect_identical(as.vector(max(a)), max(ints))
 
   floats <- c(1.3, 3, 2.4)
@@ -187,7 +187,7 @@
   floats <- c(floats, NA)
   na <- ChunkedArray$create(floats)
   expect_identical(as.vector(max(na)), max(floats))
-  expect_is(max(na, na.rm = TRUE), "Scalar")
+  expect_r6_class(max(na, na.rm = TRUE), "Scalar")
   expect_identical(as.vector(max(na, na.rm = TRUE)), max(floats, na.rm = TRUE))
 
   bools <- c(TRUE, TRUE, FALSE)
diff --git a/r/tests/testthat/test-compute-vector.R b/r/tests/testthat/test-compute-vector.R
index 0b18488..95e9363 100644
--- a/r/tests/testthat/test-compute-vector.R
+++ b/r/tests/testthat/test-compute-vector.R
@@ -18,7 +18,7 @@
 expect_bool_function_equal <- function(array_exp, r_exp) {
   # Assert that the Array operation returns a boolean array
   # and that its contents are equal to expected
-  expect_is(array_exp, "ArrowDatum")
+  expect_r6_class(array_exp, "ArrowDatum")
   expect_type_equal(array_exp, bool())
   expect_identical(as.vector(array_exp), r_exp)
 }
diff --git a/r/tests/testthat/test-data-type.R b/r/tests/testthat/test-data-type.R
index a5ecb41..5c0a311 100644
--- a/r/tests/testthat/test-data-type.R
+++ b/r/tests/testthat/test-data-type.R
@@ -392,17 +392,17 @@
   expect_error(decimal(100, 2), "Invalid: Decimal precision out of range: 100")
   expect_error(decimal(4, NA), '"scale" must be an integer')
 
-  expect_is(decimal(4, 2), "Decimal128Type")
+  expect_r6_class(decimal(4, 2), "Decimal128Type")
 
 })
 
 test_that("Binary", {
-  expect_is(binary(), "Binary")
+  expect_r6_class(binary(), "Binary")
   expect_equal(binary()$ToString(), "binary")
 })
 
 test_that("FixedSizeBinary", {
-  expect_is(fixed_size_binary(4), "FixedSizeBinary")
+  expect_r6_class(fixed_size_binary(4), "FixedSizeBinary")
   expect_equal(fixed_size_binary(4)$ToString(), "fixed_size_binary[4]")
 
   # input validation
diff --git a/r/tests/testthat/test-dataset.R b/r/tests/testthat/test-dataset.R
index 932c568..192b4b4 100644
--- a/r/tests/testthat/test-dataset.R
+++ b/r/tests/testthat/test-dataset.R
@@ -100,9 +100,9 @@
 test_that("Simple interface for datasets", {
   skip_if_not_available("parquet")
   ds <- open_dataset(dataset_dir, partitioning = schema(part = uint8()))
-  expect_is(ds$format, "ParquetFileFormat")
-  expect_is(ds$filesystem, "LocalFileSystem")
-  expect_is(ds, "Dataset")
+  expect_r6_class(ds$format, "ParquetFileFormat")
+  expect_r6_class(ds$filesystem, "LocalFileSystem")
+  expect_r6_class(ds, "Dataset")
   expect_equivalent(
     ds %>%
       select(chr, dbl) %>%
@@ -208,7 +208,7 @@
   skip_if_not_available("parquet")
   uri <- paste0("file://", dataset_dir)
   ds <- open_dataset(uri, partitioning = schema(part = uint8()))
-  expect_is(ds, "Dataset")
+  expect_r6_class(ds, "Dataset")
   expect_equivalent(
     ds %>%
       select(chr, dbl) %>%
@@ -276,7 +276,7 @@
 test_that("Hive partitioning", {
   skip_if_not_available("parquet")
   ds <- open_dataset(hive_dir, partitioning = hive_partition(other = utf8(), group = uint8()))
-  expect_is(ds, "Dataset")
+  expect_r6_class(ds, "Dataset")
   expect_equivalent(
     ds %>%
       filter(group == 2) %>%
@@ -327,8 +327,8 @@
 
 test_that("IPC/Feather format data", {
   ds <- open_dataset(ipc_dir, partitioning = "part", format = "feather")
-  expect_is(ds$format, "IpcFileFormat")
-  expect_is(ds$filesystem, "LocalFileSystem")
+  expect_r6_class(ds$format, "IpcFileFormat")
+  expect_r6_class(ds$filesystem, "LocalFileSystem")
   expect_identical(names(ds), c(names(df1), "part"))
   expect_warning(
     expect_identical(dim(ds), c(NA, 7L))
@@ -356,8 +356,8 @@
 test_that("CSV dataset", {
   skip_on_os("windows") # https://issues.apache.org/jira/browse/ARROW-12181
   ds <- open_dataset(csv_dir, partitioning = "part", format = "csv")
-  expect_is(ds$format, "CsvFileFormat")
-  expect_is(ds$filesystem, "LocalFileSystem")
+  expect_r6_class(ds$format, "CsvFileFormat")
+  expect_r6_class(ds$filesystem, "LocalFileSystem")
   expect_identical(names(ds), c(names(df1), "part"))
   expect_warning(
     expect_identical(dim(ds), c(NA, 7L))
@@ -426,8 +426,8 @@
   write.csv(df1, gzfile(dst_file), row.names = FALSE, quote = FALSE)
   format <- FileFormat$create("csv")
   ds <- open_dataset(dst_dir, format = format)
-  expect_is(ds$format, "CsvFileFormat")
-  expect_is(ds$filesystem, "LocalFileSystem")
+  expect_r6_class(ds$format, "CsvFileFormat")
+  expect_r6_class(ds$filesystem, "LocalFileSystem")
 
   expect_equivalent(
     ds %>%
@@ -590,7 +590,7 @@
   ds1 <- open_dataset(file.path(dataset_dir, 1))
   ds2 <- open_dataset(file.path(dataset_dir, 2))
   union1 <- open_dataset(list(ds1, ds2))
-  expect_is(union1, "UnionDataset")
+  expect_r6_class(union1, "UnionDataset")
   expect_equivalent(
     union1 %>%
       select(chr, dbl) %>%
@@ -605,7 +605,7 @@
 
   # Now with the c() method
   union2 <- c(ds1, ds2)
-  expect_is(union2, "UnionDataset")
+  expect_r6_class(union2, "UnionDataset")
   expect_equivalent(
     union2 %>%
       select(chr, dbl) %>%
@@ -624,7 +624,7 @@
 
 test_that("InMemoryDataset", {
   ds <- InMemoryDataset$create(rbind(df1, df2))
-  expect_is(ds, "InMemoryDataset")
+  expect_r6_class(ds, "InMemoryDataset")
   expect_equivalent(
     ds %>%
       select(chr, dbl) %>%
@@ -861,9 +861,9 @@
 test_that("filter() with expressions", {
   skip_if_not_available("parquet")
   ds <- open_dataset(dataset_dir, partitioning = schema(part = uint8()))
-  expect_is(ds$format, "ParquetFileFormat")
-  expect_is(ds$filesystem, "LocalFileSystem")
-  expect_is(ds, "Dataset")
+  expect_r6_class(ds$format, "ParquetFileFormat")
+  expect_r6_class(ds$filesystem, "LocalFileSystem")
+  expect_r6_class(ds, "Dataset")
   expect_equivalent(
     ds %>%
       select(chr, dbl) %>%
@@ -1314,7 +1314,7 @@
     ),
     fixed = TRUE
   )
-  expect_is(ds$metadata, "list")
+  expect_type(ds$metadata, "list")
   q <- select(ds, string = chr, lgl, integer = int)
   expect_output(
     print(q),
@@ -1348,16 +1348,16 @@
 
 expect_scan_result <- function(ds, schm) {
   sb <- ds$NewScan()
-  expect_is(sb, "ScannerBuilder")
+  expect_r6_class(sb, "ScannerBuilder")
   expect_equal(sb$schema, schm)
 
   sb$Project(c("chr", "lgl"))
   sb$Filter(Expression$field_ref("dbl") == 8)
   scn <- sb$Finish()
-  expect_is(scn, "Scanner")
+  expect_r6_class(scn, "Scanner")
 
   tab <- scn$ToTable()
-  expect_is(tab, "Table")
+  expect_r6_class(tab, "Table")
 
   expect_equivalent(
     as.data.frame(tab),
@@ -1373,19 +1373,19 @@
 
   fmt <- FileFormat$create("parquet")
   factory <- FileSystemDatasetFactory$create(fs, selector, NULL, fmt, partitioning = partitioning)
-  expect_is(factory, "FileSystemDatasetFactory")
-
+  expect_r6_class(factory, "FileSystemDatasetFactory")
+  
   schm <- factory$Inspect()
-  expect_is(schm, "Schema")
+  expect_r6_class(schm, "Schema")
 
   phys_schm <- ParquetFileReader$create(files[1])$GetSchema()
   expect_equal(names(phys_schm), names(df1))
   expect_equal(names(schm), c(names(phys_schm), "part"))
 
   child <- factory$Finish(schm)
-  expect_is(child, "FileSystemDataset")
-  expect_is(child$schema, "Schema")
-  expect_is(child$format, "ParquetFileFormat")
+  expect_r6_class(child, "FileSystemDataset")
+  expect_r6_class(child$schema, "Schema")
+  expect_r6_class(child$format, "ParquetFileFormat")
   expect_equal(names(schm), names(child$schema))
   expect_equivalent(child$files, files)
 
@@ -1396,22 +1396,22 @@
 test_that("Assembling multiple DatasetFactories with DatasetFactory", {
   skip_if_not_available("parquet")
   factory1 <- dataset_factory(file.path(dataset_dir, 1), format = "parquet")
-  expect_is(factory1, "FileSystemDatasetFactory")
+  expect_r6_class(factory1, "FileSystemDatasetFactory")
   factory2 <- dataset_factory(file.path(dataset_dir, 2), format = "parquet")
-  expect_is(factory2, "FileSystemDatasetFactory")
+  expect_r6_class(factory2, "FileSystemDatasetFactory")
 
   factory <- DatasetFactory$create(list(factory1, factory2))
-  expect_is(factory, "DatasetFactory")
+  expect_r6_class(factory, "DatasetFactory")
 
   schm <- factory$Inspect()
-  expect_is(schm, "Schema")
+  expect_r6_class(schm, "Schema")
 
   phys_schm <- ParquetFileReader$create(files[1])$GetSchema()
   expect_equal(names(phys_schm), names(df1))
 
   ds <- factory$Finish(schm)
-  expect_is(ds, "UnionDataset")
-  expect_is(ds$schema, "Schema")
+  expect_r6_class(ds, "UnionDataset")
+  expect_r6_class(ds$schema, "Schema")
   expect_equal(names(schm), names(ds$schema))
   expect_equivalent(map(ds$children, ~.$files), files)
 
diff --git a/r/tests/testthat/test-dplyr-filter.R b/r/tests/testthat/test-dplyr-filter.R
index bac6429..c4ab042 100644
--- a/r/tests/testthat/test-dplyr-filter.R
+++ b/r/tests/testthat/test-dplyr-filter.R
@@ -272,7 +272,7 @@
 
 test_that("filter environment scope", {
   # "object 'b_var' not found"
-  expect_dplyr_error(input %>% filter(batch, chr == b_var))
+  expect_dplyr_error(input %>% filter(chr == b_var), tbl)
 
   b_var <- "b"
   expect_dplyr_equal(
@@ -283,7 +283,8 @@
   )
   # Also for functions
   # 'could not find function "isEqualTo"' because we haven't defined it yet
-  expect_dplyr_error(filter(batch, isEqualTo(int, 4)))
+  expect_dplyr_error(input %>% filter(isEqualTo(int, 4)), tbl)
+  
 
   skip("Need to substitute in user defined function too")
   # TODO: fix this: this isEqualTo function is eagerly evaluating; it should
@@ -389,11 +390,14 @@
     tbl
   )
 
+  skip("test now faulty - code no longer gives error & outputs a empty tibble")
   # but there is an error if we don't override the masking with `.env`
   expect_dplyr_error(
-    tbl %>%
+    input %>%
       filter(.data$dbl > chr) %>%
       select(.data$chr, .data$int, .data$lgl) %>%
-      collect()
+      collect(),
+    tbl
   )
+  
 })
diff --git a/r/tests/testthat/test-dplyr-mutate.R b/r/tests/testthat/test-dplyr-mutate.R
index 662f6d7..4f202fa 100644
--- a/r/tests/testthat/test-dplyr-mutate.R
+++ b/r/tests/testthat/test-dplyr-mutate.R
@@ -26,7 +26,7 @@
 tbl$padded_strings <- stringr::str_pad(letters[1:10], width = 2*(1:10)+1, side = "both")
 
 test_that("mutate() is lazy", {
-  expect_is(
+  expect_s3_class(
     tbl %>% record_batch() %>% mutate(int = int + 6L),
     "arrow_dplyr_query"
   )
diff --git a/r/tests/testthat/test-dplyr.R b/r/tests/testthat/test-dplyr.R
index def7886..a02b00f 100644
--- a/r/tests/testthat/test-dplyr.R
+++ b/r/tests/testthat/test-dplyr.R
@@ -32,7 +32,7 @@
     select(int, chr) %>%
     filter(int > 5)
 
-  expect_is(b2, "arrow_dplyr_query")
+  expect_s3_class(b2, "arrow_dplyr_query")
   t2 <- collect(b2)
   expect_equal(t2, tbl[tbl$int > 5 & !is.na(tbl$int), c("int", "chr")])
   # Test that the original object is not affected
@@ -187,7 +187,7 @@
     filter(int > 5) %>%
     collect(as_data_frame = FALSE)
 
-  expect_is(b2, "RecordBatch")
+  expect_r6_class(b2, "RecordBatch")
   expected <- tbl[tbl$int > 5 & !is.na(tbl$int), c("int", "chr")]
   expect_equal(as.data.frame(b2), expected)
 
@@ -195,7 +195,7 @@
     select(int, strng = chr) %>%
     filter(int > 5) %>%
     collect(as_data_frame = FALSE)
-  expect_is(b3, "RecordBatch")
+  expect_r6_class(b3, "RecordBatch")
   expect_equal(as.data.frame(b3), set_names(expected, c("int", "strng")))
 
   b4 <- batch %>%
@@ -203,7 +203,7 @@
     filter(int > 5) %>%
     group_by(int) %>%
     collect(as_data_frame = FALSE)
-  expect_is(b4, "arrow_dplyr_query")
+  expect_s3_class(b4, "arrow_dplyr_query")
   expect_equal(
     as.data.frame(b4),
     expected %>%
@@ -257,7 +257,7 @@
     filter(int > 5) %>%
     head(2)
 
-  expect_is(b2, "RecordBatch")
+  expect_r6_class(b2, "RecordBatch")
   expected <- tbl[tbl$int > 5 & !is.na(tbl$int), c("int", "chr")][1:2, ]
   expect_equal(as.data.frame(b2), expected)
 
@@ -265,7 +265,7 @@
     select(int, strng = chr) %>%
     filter(int > 5) %>%
     head(2)
-  expect_is(b3, "RecordBatch")
+  expect_r6_class(b3, "RecordBatch")
   expect_equal(as.data.frame(b3), set_names(expected, c("int", "strng")))
 
   b4 <- batch %>%
@@ -273,7 +273,7 @@
     filter(int > 5) %>%
     group_by(int) %>%
     head(2)
-  expect_is(b4, "arrow_dplyr_query")
+  expect_s3_class(b4, "arrow_dplyr_query")
   expect_equal(
     as.data.frame(b4),
     expected %>%
@@ -290,7 +290,7 @@
     filter(int > 5) %>%
     tail(2)
 
-  expect_is(b2, "RecordBatch")
+  expect_r6_class(b2, "RecordBatch")
   expected <- tail(tbl[tbl$int > 5 & !is.na(tbl$int), c("int", "chr")], 2)
   expect_equal(as.data.frame(b2), expected)
 
@@ -298,7 +298,7 @@
     select(int, strng = chr) %>%
     filter(int > 5) %>%
     tail(2)
-  expect_is(b3, "RecordBatch")
+  expect_r6_class(b3, "RecordBatch")
   expect_equal(as.data.frame(b3), set_names(expected, c("int", "strng")))
 
   b4 <- batch %>%
@@ -306,7 +306,7 @@
     filter(int > 5) %>%
     group_by(int) %>%
     tail(2)
-  expect_is(b4, "arrow_dplyr_query")
+  expect_s3_class(b4, "arrow_dplyr_query")
   expect_equal(
     as.data.frame(b4),
     expected %>%
diff --git a/r/tests/testthat/test-expression.R b/r/tests/testthat/test-expression.R
index d7eb6df..dd61b5e 100644
--- a/r/tests/testthat/test-expression.R
+++ b/r/tests/testthat/test-expression.R
@@ -18,7 +18,7 @@
 context("Expressions")
 
 test_that("Can create an expression", {
-  expect_is(build_array_expression(">", Array$create(1:5), 4), "array_expression")
+  expect_s3_class(build_array_expression(">", Array$create(1:5), 4), "array_expression")
 })
 
 test_that("as.vector(array_expression)", {
@@ -37,11 +37,11 @@
 test_that("array_refs", {
   tab <- Table$create(a = 1:5)
   ex <- build_array_expression(">", array_expression("array_ref", field_name = "a"), 4)
-  expect_is(ex, "array_expression")
+  expect_s3_class(ex, "array_expression")
   expect_identical(ex$args[[1]]$args$field_name, "a")
   expect_identical(find_array_refs(ex), "a")
   out <- eval_array_expression(ex, tab)
-  expect_is(out, "ChunkedArray")
+  expect_r6_class(out, "ChunkedArray")
   expect_equal(as.vector(out), c(FALSE, FALSE, FALSE, FALSE, TRUE))
 })
 
@@ -55,45 +55,45 @@
   i64 <- Expression$scalar(bit64::as.integer64(42))
   time <- Expression$scalar(hms::hms(56, 34, 12))
 
-  expect_is(f == g, "Expression")
-  expect_is(f == 4, "Expression")
-  expect_is(f == "", "Expression")
-  expect_is(f == NULL, "Expression")
-  expect_is(f == date, "Expression")
-  expect_is(f == i64, "Expression")
-  expect_is(f == time, "Expression")
+  expect_r6_class(f == g, "Expression")
+  expect_r6_class(f == 4, "Expression")
+  expect_r6_class(f == "", "Expression")
+  expect_r6_class(f == NULL, "Expression")
+  expect_r6_class(f == date, "Expression")
+  expect_r6_class(f == i64, "Expression")
+  expect_r6_class(f == time, "Expression")
   # can't seem to make this work right now because of R Ops.method dispatch
-  # expect_is(f == as.Date("2020-01-15"), "Expression")
-  expect_is(f == ts, "Expression")
-  expect_is(f <= 2L, "Expression")
-  expect_is(f != FALSE, "Expression")
-  expect_is(f > 4, "Expression")
-  expect_is(f < 4 & f > 2, "Expression")
-  expect_is(f < 4 | f > 2, "Expression")
-  expect_is(!(f < 4), "Expression")
+  # expect_r6_class(f == as.Date("2020-01-15"), "Expression")
+  expect_r6_class(f == ts, "Expression")
+  expect_r6_class(f <= 2L, "Expression")
+  expect_r6_class(f != FALSE, "Expression")
+  expect_r6_class(f > 4, "Expression")
+  expect_r6_class(f < 4 & f > 2, "Expression")
+  expect_r6_class(f < 4 | f > 2, "Expression")
+  expect_r6_class(!(f < 4), "Expression")
   expect_output(
     print(f > 4),
     'Expression\n(f > 4)',
     fixed = TRUE
   )
   # Interprets that as a list type
-  expect_is(f == c(1L, 2L), "Expression")
+  expect_r6_class(f == c(1L, 2L), "Expression")
 })
 
 test_that("Can create an expression", {
   a <- Array$create(as.numeric(1:5))
   expr <- array_expression("cast", a, options = list(to_type = int32()))
-  expect_is(expr, "array_expression")
+  expect_s3_class(expr, "array_expression")
   expect_equal(eval_array_expression(expr), Array$create(1:5))
 
   b <- Array$create(0.5:4.5)
   bad_expr <- array_expression("cast", b, options = list(to_type = int32()))
-  expect_is(bad_expr, "array_expression")
+  expect_s3_class(bad_expr, "array_expression")
   expect_error(
     eval_array_expression(bad_expr),
     "Invalid: Float value .* was truncated converting"
   )
   expr <- array_expression("cast", b, options = list(to_type = int32(), allow_float_truncate = TRUE))
-  expect_is(expr, "array_expression")
+  expect_s3_class(expr, "array_expression")
   expect_equal(eval_array_expression(expr), Array$create(0:4))
 })
diff --git a/r/tests/testthat/test-feather.R b/r/tests/testthat/test-feather.R
index abaae2c..d5d82a7 100644
--- a/r/tests/testthat/test-feather.R
+++ b/r/tests/testthat/test-feather.R
@@ -44,18 +44,18 @@
 
   # Read both back
   tab2 <- read_feather(tf2)
-  expect_is(tab2, "data.frame")
+  expect_s3_class(tab2, "data.frame")
 
   tab3 <- read_feather(tf3)
-  expect_is(tab3, "data.frame")
+  expect_s3_class(tab3, "data.frame")
 
   # reading directly from arrow::io::MemoryMappedFile
   tab4 <- read_feather(mmap_open(tf3))
-  expect_is(tab4, "data.frame")
+  expect_s3_class(tab4, "data.frame")
 
   # reading directly from arrow::io::ReadableFile
   tab5 <- read_feather(ReadableFile$create(tf3))
-  expect_is(tab5, "data.frame")
+  expect_s3_class(tab5, "data.frame")
 
   expect_equal(tib, tab2)
   expect_equal(tib, tab3)
@@ -105,7 +105,7 @@
 
 test_that("read_feather supports col_select = <names>", {
   tab1 <- read_feather(feather_file, col_select = c("x", "y"))
-  expect_is(tab1, "data.frame")
+  expect_s3_class(tab1, "data.frame")
 
   expect_equal(tib$x, tab1$x)
   expect_equal(tib$y, tab1$y)
@@ -113,7 +113,7 @@
 
 test_that("feather handles col_select = <integer>", {
   tab1 <- read_feather(feather_file, col_select = 1:2)
-  expect_is(tab1, "data.frame")
+  expect_s3_class(tab1, "data.frame")
 
   expect_equal(tib$x, tab1$x)
   expect_equal(tib$y, tab1$y)
@@ -135,7 +135,7 @@
 
 test_that("feather read/write round trip", {
   tab1 <- read_feather(feather_file, as_data_frame = FALSE)
-  expect_is(tab1, "Table")
+  expect_r6_class(tab1, "Table")
 
   expect_equal(tib, as.data.frame(tab1))
 })
@@ -143,7 +143,7 @@
 test_that("Read feather from raw vector", {
   test_raw <- readBin(feather_file, what = "raw", n = 5000)
   df <- read_feather(test_raw)
-  expect_is(df, "data.frame")
+  expect_s3_class(df, "data.frame")
 })
 
 test_that("FeatherReader", {
diff --git a/r/tests/testthat/test-filesystem.R b/r/tests/testthat/test-filesystem.R
index 918c495..344865c 100644
--- a/r/tests/testthat/test-filesystem.R
+++ b/r/tests/testthat/test-filesystem.R
@@ -81,9 +81,9 @@
   file.copy(DESCRIPTION, file.path(td, "DESCRIPTION"))
 
   st_fs <- SubTreeFileSystem$create(td)
-  expect_is(st_fs, "SubTreeFileSystem")
-  expect_is(st_fs, "FileSystem")
-  expect_is(st_fs$base_fs, "LocalFileSystem")
+  expect_r6_class(st_fs, "SubTreeFileSystem")
+  expect_r6_class(st_fs, "FileSystem")
+  expect_r6_class(st_fs$base_fs, "LocalFileSystem")
   expect_identical(
     capture.output(print(st_fs)),
     paste0("SubTreeFileSystem: ", "file://", st_fs$base_path)
@@ -137,7 +137,7 @@
   skip_on_cran()
   skip_if_not_available("s3")
   fs_and_path <- FileSystem$from_uri("s3://ursa-labs-taxi-data")
-  expect_is(fs_and_path$fs, "S3FileSystem")
+  expect_r6_class(fs_and_path$fs, "S3FileSystem")
   expect_identical(fs_and_path$fs$region, "us-east-2")
 })
 
@@ -145,7 +145,7 @@
   skip_on_cran()
   skip_if_not_available("s3")
   fs <- SubTreeFileSystem$create("s3://ursa-labs-taxi-data")
-  expect_is(fs, "SubTreeFileSystem")
+  expect_r6_class(fs, "SubTreeFileSystem")
   expect_identical(
     capture.output(print(fs)),
     "SubTreeFileSystem: s3://ursa-labs-taxi-data/"
@@ -156,15 +156,15 @@
   skip_on_cran()
   skip_if_not_available("s3")
   s3fs <- S3FileSystem$create()
-  expect_is(s3fs, "S3FileSystem")
+  expect_r6_class(s3fs, "S3FileSystem")
 })
 
 test_that("s3_bucket", {
   skip_on_cran()
   skip_if_not_available("s3")
   bucket <- s3_bucket("ursa-labs-r-test")
-  expect_is(bucket, "SubTreeFileSystem")
-  expect_is(bucket$base_fs, "S3FileSystem")
+  expect_r6_class(bucket, "SubTreeFileSystem")
+  expect_r6_class(bucket$base_fs, "S3FileSystem")
   expect_identical(bucket$region, "us-west-2")
   expect_identical(
     capture.output(print(bucket)),
diff --git a/r/tests/testthat/test-json.R b/r/tests/testthat/test-json.R
index a35a465..b0b508b 100644
--- a/r/tests/testthat/test-json.R
+++ b/r/tests/testthat/test-json.R
@@ -58,9 +58,9 @@
   tab2 <- read_json_arrow(mmap_open(tf))
   tab3 <- read_json_arrow(ReadableFile$create(tf))
 
-  expect_is(tab1, "tbl_df")
-  expect_is(tab2, "tbl_df")
-  expect_is(tab3, "tbl_df")
+  expect_s3_class(tab1, "tbl_df")
+  expect_s3_class(tab2, "tbl_df")
+  expect_s3_class(tab3, "tbl_df")
 
   expect_equal(tab1, tab2)
   expect_equal(tab1, tab3)
diff --git a/r/tests/testthat/test-memory-pool.R b/r/tests/testthat/test-memory-pool.R
index ab38cc7..0aa18aa 100644
--- a/r/tests/testthat/test-memory-pool.R
+++ b/r/tests/testthat/test-memory-pool.R
@@ -18,8 +18,8 @@
 test_that("default_memory_pool and its attributes", {
   pool <- default_memory_pool()
   # Not integer bc can be >2gb, so we cast to double
-  expect_is(pool$bytes_allocated, "numeric")
-  expect_is(pool$max_memory, "numeric")
+  expect_type(pool$bytes_allocated, "double")
+  expect_type(pool$max_memory, "double")
   expect_true(pool$backend_name %in% c("system", "jemalloc", "mimalloc"))
 
   expect_true(all(supported_memory_backends() %in% c("system", "jemalloc", "mimalloc")))
diff --git a/r/tests/testthat/test-message-reader.R b/r/tests/testthat/test-message-reader.R
index 0bd6d66..340a3e3 100644
--- a/r/tests/testthat/test-message-reader.R
+++ b/r/tests/testthat/test-message-reader.R
@@ -24,10 +24,10 @@
   reader <- MessageReader$create(bytes)
 
   message <- reader$ReadNextMessage()
-  expect_is(message, "Message")
+  expect_r6_class(message, "Message")
   expect_equal(message$type, MessageType$RECORD_BATCH)
-  expect_is(message$body, "Buffer")
-  expect_is(message$metadata, "Buffer")
+  expect_r6_class(message$body, "Buffer")
+  expect_r6_class(message$metadata, "Buffer")
 
   message <- reader$ReadNextMessage()
   expect_null(message)
@@ -38,10 +38,10 @@
   reader <- MessageReader$create(bytes)
 
   message <- reader$ReadNextMessage()
-  expect_is(message, "Message")
+  expect_r6_class(message, "Message")
   expect_equal(message$type, MessageType$SCHEMA)
-  expect_is(message$body, "Buffer")
-  expect_is(message$metadata, "Buffer")
+  expect_r6_class(message$body, "Buffer")
+  expect_r6_class(message$metadata, "Buffer")
 
   message <- reader$ReadNextMessage()
   expect_null(message)
@@ -52,16 +52,16 @@
   bytes <- batch$serialize()
 
   stream <- BufferReader$create(bytes)
-  expect_is(stream, "BufferReader")
+  expect_r6_class(stream, "BufferReader")
 
   reader <- MessageReader$create(stream)
-  expect_is(reader, "MessageReader")
+  expect_r6_class(reader, "MessageReader")
 
   message <- reader$ReadNextMessage()
-  expect_is(message, "Message")
+  expect_r6_class(message, "Message")
   expect_equal(message$type, MessageType$RECORD_BATCH)
-  expect_is(message$body, "Buffer")
-  expect_is(message$metadata, "Buffer")
+  expect_r6_class(message$body, "Buffer")
+  expect_r6_class(message$metadata, "Buffer")
 
   message <- reader$ReadNextMessage()
   expect_null(message)
@@ -70,16 +70,16 @@
   bytes <- schema$serialize()
 
   stream <- BufferReader$create(bytes)
-  expect_is(stream, "BufferReader")
+  expect_r6_class(stream, "BufferReader")
 
   reader <- MessageReader$create(stream)
-  expect_is(reader, "MessageReader")
+  expect_r6_class(reader, "MessageReader")
 
   message <- reader$ReadNextMessage()
-  expect_is(message, "Message")
+  expect_r6_class(message, "Message")
   expect_equal(message$type, MessageType$SCHEMA)
-  expect_is(message$body, "Buffer")
-  expect_is(message$metadata, "Buffer")
+  expect_r6_class(message$body, "Buffer")
+  expect_r6_class(message$metadata, "Buffer")
 
   message <- reader$ReadNextMessage()
   expect_null(message)
diff --git a/r/tests/testthat/test-message.R b/r/tests/testthat/test-message.R
index c6cd9fe..b9fb3a1 100644
--- a/r/tests/testthat/test-message.R
+++ b/r/tests/testthat/test-message.R
@@ -23,10 +23,10 @@
   stream <- BufferReader$create(bytes)
 
   message <- read_message(stream)
-  expect_is(message, "Message")
+  expect_r6_class(message, "Message")
   expect_equal(message$type, MessageType$RECORD_BATCH)
-  expect_is(message$body, "Buffer")
-  expect_is(message$metadata, "Buffer")
+  expect_r6_class(message$body, "Buffer")
+  expect_r6_class(message$metadata, "Buffer")
 
   message <- read_message(stream)
   expect_null(read_message(stream))
@@ -37,10 +37,10 @@
   stream <- BufferReader$create(bytes)
   message <- read_message(stream)
 
-  expect_is(message, "Message")
+  expect_r6_class(message, "Message")
   expect_equal(message$type, MessageType$SCHEMA)
-  expect_is(message$body, "Buffer")
-  expect_is(message$metadata, "Buffer")
+  expect_r6_class(message$body, "Buffer")
+  expect_r6_class(message$metadata, "Buffer")
 
   message <- read_message(stream)
   expect_null(read_message(stream))
diff --git a/r/tests/testthat/test-metadata.R b/r/tests/testthat/test-metadata.R
index 4e1895e..afce1c2 100644
--- a/r/tests/testthat/test-metadata.R
+++ b/r/tests/testthat/test-metadata.R
@@ -167,7 +167,7 @@
 
 test_that("Date/time type roundtrip", {
   rb <- record_batch(example_with_times)
-  expect_is(rb$schema$posixlt$type, "StructType")
+  expect_r6_class(rb$schema$posixlt$type, "StructType")
   expect_identical(as.data.frame(rb), example_with_times)
 })
 
diff --git a/r/tests/testthat/test-python.R b/r/tests/testthat/test-python.R
index b564bfe..8852748 100644
--- a/r/tests/testthat/test-python.R
+++ b/r/tests/testthat/test-python.R
@@ -43,7 +43,7 @@
   pa <- reticulate::import("pyarrow", convert = FALSE)
   r <- Array$create(c(1, 2, 3))
   py <- pa$concat_arrays(list(r))
-  expect_is(py, "pyarrow.lib.Array")
+  expect_s3_class(py, "pyarrow.lib.Array")
   expect_equal(reticulate::py_to_r(py), r)
 })
 
@@ -52,7 +52,7 @@
   pa <- reticulate::import("pyarrow", convert = FALSE)
   batch <- record_batch(col1 = c(1, 2, 3), col2 = letters[1:3])
   py <- reticulate::r_to_py(batch)
-  expect_is(py, "pyarrow.lib.RecordBatch")
+  expect_s3_class(py, "pyarrow.lib.RecordBatch")
   expect_equal(reticulate::py_to_r(py), batch)
 })
 
@@ -63,8 +63,8 @@
   tab <- Table$create(batch, batch)
   pybatch <- reticulate::r_to_py(batch)
   pytab <- pa$Table$from_batches(list(pybatch, pybatch))
-  expect_is(pytab, "pyarrow.lib.Table")
-  expect_is(pytab[0], "pyarrow.lib.ChunkedArray")
+  expect_s3_class(pytab, "pyarrow.lib.Table")
+  expect_s3_class(pytab[0], "pyarrow.lib.ChunkedArray")
   expect_equal(reticulate::py_to_r(pytab[0]), tab$col1)
   expect_equal(reticulate::py_to_r(pytab), tab)
 })
@@ -75,11 +75,11 @@
   tab <- Table$create(batch, batch)
 
   pychunked <- reticulate::r_to_py(tab$col1)
-  expect_is(pychunked, "pyarrow.lib.ChunkedArray")
+  expect_s3_class(pychunked, "pyarrow.lib.ChunkedArray")
   expect_equal(reticulate::py_to_r(pychunked), tab$col1)
 
   pytab <- reticulate::r_to_py(tab)
-  expect_is(pytab, "pyarrow.lib.Table")
+  expect_s3_class(pytab, "pyarrow.lib.Table")
   expect_equal(reticulate::py_to_r(pytab), tab)
 })
 
@@ -87,7 +87,7 @@
   skip_if_no_pyarrow()
   batch <- RecordBatch$create(example_with_times)
   pybatch <- reticulate::r_to_py(batch)
-  expect_is(pybatch, "pyarrow.lib.RecordBatch")
+  expect_s3_class(pybatch, "pyarrow.lib.RecordBatch")
   expect_equal(reticulate::py_to_r(pybatch), batch)
   expect_identical(as.data.frame(reticulate::py_to_r(pybatch)), example_with_times)
 })
@@ -96,7 +96,7 @@
   skip_if_no_pyarrow()
   tab <- Table$create(example_with_times)
   pytab <- reticulate::r_to_py(tab)
-  expect_is(pytab, "pyarrow.lib.Table")
+  expect_s3_class(pytab, "pyarrow.lib.Table")
   expect_equal(reticulate::py_to_r(pytab), tab)
   expect_identical(as.data.frame(reticulate::py_to_r(pytab)), example_with_times)
 })
diff --git a/r/tests/testthat/test-read-record-batch.R b/r/tests/testthat/test-read-record-batch.R
index 9383c47..56f4e8e 100644
--- a/r/tests/testthat/test-read-record-batch.R
+++ b/r/tests/testthat/test-read-record-batch.R
@@ -34,7 +34,7 @@
 
   stream <- FileOutputStream$create(tf)
   writer <- RecordBatchFileWriter$create(stream, tab$schema)
-  expect_is(writer, "RecordBatchWriter")
+  expect_r6_class(writer, "RecordBatchWriter")
   writer$write_table(tab)
   writer$close()
   stream$close()
diff --git a/r/tests/testthat/test-read-write.R b/r/tests/testthat/test-read-write.R
index a9ce5f1..ea3aa34 100644
--- a/r/tests/testthat/test-read-write.R
+++ b/r/tests/testthat/test-read-write.R
@@ -119,7 +119,7 @@
     as.data.frame(RecordBatchStreamReader$create(x)$read_next_batch())
   }
   bytes <- write_to_raw(example_data)
-  expect_is(bytes, "raw")
+  expect_type(bytes, "raw")
   expect_identical(read_from_raw_test(bytes), example_data)
   # this could just be `read_ipc_stream(x)`; propose that
   expect_identical(read_ipc_stream(bytes), example_data)
diff --git a/r/tests/testthat/test-record-batch-reader.R b/r/tests/testthat/test-record-batch-reader.R
index 9a5e4dd..483588a 100644
--- a/r/tests/testthat/test-record-batch-reader.R
+++ b/r/tests/testthat/test-record-batch-reader.R
@@ -28,7 +28,7 @@
   sink <- BufferOutputStream$create()
   expect_equal(sink$tell(), 0)
   writer <- RecordBatchStreamWriter$create(sink, batch$schema)
-  expect_is(writer, "RecordBatchWriter")
+  expect_r6_class(writer, "RecordBatchWriter")
   writer$write(batch)
   writer$write(tab)
   writer$write(tbl)
@@ -36,19 +36,19 @@
   writer$close()
 
   buf <- sink$finish()
-  expect_is(buf, "Buffer")
+  expect_r6_class(buf, "Buffer")
 
   reader <- RecordBatchStreamReader$create(buf)
-  expect_is(reader, "RecordBatchStreamReader")
+  expect_r6_class(reader, "RecordBatchStreamReader")
 
   batch1 <- reader$read_next_batch()
-  expect_is(batch1, "RecordBatch")
+  expect_r6_class(batch1, "RecordBatch")
   expect_equal(batch, batch1)
   batch2 <- reader$read_next_batch()
-  expect_is(batch2, "RecordBatch")
+  expect_r6_class(batch2, "RecordBatch")
   expect_equal(batch, batch2)
   batch3 <- reader$read_next_batch()
-  expect_is(batch3, "RecordBatch")
+  expect_r6_class(batch3, "RecordBatch")
   expect_equal(batch, batch3)
   expect_null(reader$read_next_batch())
 })
@@ -56,20 +56,20 @@
 test_that("RecordBatchFileReader / Writer", {
   sink <- BufferOutputStream$create()
   writer <- RecordBatchFileWriter$create(sink, batch$schema)
-  expect_is(writer, "RecordBatchWriter")
+  expect_r6_class(writer, "RecordBatchWriter")
   writer$write(batch)
   writer$write(tab)
   writer$write(tbl)
   writer$close()
 
   buf <- sink$finish()
-  expect_is(buf, "Buffer")
+  expect_r6_class(buf, "Buffer")
 
   reader <- RecordBatchFileReader$create(buf)
-  expect_is(reader, "RecordBatchFileReader")
+  expect_r6_class(reader, "RecordBatchFileReader")
 
   batch1 <- reader$get_batch(0)
-  expect_is(batch1, "RecordBatch")
+  expect_r6_class(batch1, "RecordBatch")
   expect_equal(batch, batch1)
 
   expect_equal(reader$num_record_batches, 3)
@@ -78,7 +78,7 @@
 test_that("StreamReader read_table", {
   sink <- BufferOutputStream$create()
   writer <- RecordBatchStreamWriter$create(sink, batch$schema)
-  expect_is(writer, "RecordBatchWriter")
+  expect_r6_class(writer, "RecordBatchWriter")
   writer$write(batch)
   writer$write(tab)
   writer$write(tbl)
@@ -93,7 +93,7 @@
 test_that("FileReader read_table", {
   sink <- BufferOutputStream$create()
   writer <- RecordBatchFileWriter$create(sink, batch$schema)
-  expect_is(writer, "RecordBatchWriter")
+  expect_r6_class(writer, "RecordBatchWriter")
   writer$write(batch)
   writer$write(tab)
   writer$write(tbl)
@@ -137,6 +137,6 @@
 
   reader <- RecordBatchStreamReader$create(buf)
   tab <- reader$read_table()
-  expect_is(tab, "Table")
+  expect_r6_class(tab, "Table")
   expect_identical(dim(tab), c(0L, 1L))
 })
diff --git a/r/tests/testthat/test-s3-minio.R b/r/tests/testthat/test-s3-minio.R
index d3493f8..8cb0daf 100644
--- a/r/tests/testthat/test-s3-minio.R
+++ b/r/tests/testthat/test-s3-minio.R
@@ -38,7 +38,7 @@
       scheme = "http",
       endpoint_override = paste0("localhost:", minio_port)
     )
-    expect_is(fs, "S3FileSystem")
+    expect_r6_class(fs, "S3FileSystem")
     now <- as.character(as.numeric(Sys.time()))
     # If minio isn't running, this will hang for a few seconds and fail with a
     # curl timeout, causing `run_these` to be set to FALSE and skipping the tests
diff --git a/r/tests/testthat/test-scalar.R b/r/tests/testthat/test-scalar.R
index 501298a..21b2836 100644
--- a/r/tests/testthat/test-scalar.R
+++ b/r/tests/testthat/test-scalar.R
@@ -19,7 +19,7 @@
 
 expect_scalar_roundtrip <- function(x, type) {
   s <- Scalar$create(x)
-  expect_is(s, "Scalar")
+  expect_r6_class(s, "Scalar")
   expect_type_equal(s$type, type)
   expect_identical(length(s), 1L)
   if (inherits(type, "NestedType")) {
diff --git a/r/tests/testthat/test-schema.R b/r/tests/testthat/test-schema.R
index ac888d9..87dad17 100644
--- a/r/tests/testthat/test-schema.R
+++ b/r/tests/testthat/test-schema.R
@@ -120,27 +120,27 @@
   # TODO: this uses the streaming format, i.e. from RecordBatchStreamWriter
   #       maybe there is an easier way to serialize a schema
   batch <- record_batch(x = 1:10)
-  expect_is(batch, "RecordBatch")
+  expect_r6_class(batch, "RecordBatch")
 
   stream <- BufferOutputStream$create()
   writer <- RecordBatchStreamWriter$create(stream, batch$schema)
-  expect_is(writer, "RecordBatchWriter")
+  expect_r6_class(writer, "RecordBatchWriter")
   writer$close()
 
   buffer <- stream$finish()
-  expect_is(buffer, "Buffer")
+  expect_r6_class(buffer, "Buffer")
 
   reader <- MessageReader$create(buffer)
-  expect_is(reader, "MessageReader")
+  expect_r6_class(reader, "MessageReader")
 
   message <- reader$ReadNextMessage()
-  expect_is(message, "Message")
+  expect_r6_class(message, "Message")
   expect_equal(message$type, MessageType$SCHEMA)
 
   stream <- BufferReader$create(buffer)
-  expect_is(stream, "BufferReader")
+  expect_r6_class(stream, "BufferReader")
   message <- read_message(stream)
-  expect_is(message, "Message")
+  expect_r6_class(message, "Message")
   expect_equal(message$type, MessageType$SCHEMA)
 })