tests/testthat/test-use_cassette.R

test_that("local_cassette() integration test", {
  # This tests that everything works together AND ensures that we have
  # one cassette file on disk
  local_cassette("integration")

  req <- httr2::request(hb("/get"))
  expect_no_error(httr2::req_perform(req))
})

test_that("use_cassette returns a cassette", {
  cassette <- use_cassette("testing1", NULL, warn_on_empty = FALSE)
  expect_s3_class(cassette, "Cassette")
})

test_that("defaults to _vcr directory", {
  cassette <- use_cassette("test", NULL, warn_on_empty = FALSE)
  expect_equal(cassette$root_dir, test_path("_vcr"))
})

test_that("local_cassette() checks its inputs", {
  local_vcr_configure(warn_on_empty_cassette = FALSE)

  expect_snapshot(error = TRUE, {
    local_cassette()
    local_cassette("test")
    local_cassette("test", NULL, record = "xxx")
    local_cassette("test", NULL, match_requests_on = "xxx")
    local_cassette("text", NULL, preserve_exact_body_bytes = "xxx")
    local_cassette("test", NULL, serialize_with = "howdy")
  })
})

test_that("local_cassette checks name", {
  local_vcr_configure(warn_on_empty_cassette = FALSE)

  expect_snapshot(error = TRUE, {
    local_cassette("foo bar")
    local_cassette("foo.yml")
    local_cassette("foo/bar")
    local_cassette("foo\nbar")
    local_cassette("foo\nbar.")
    local_cassette("..")
    local_cassette("con")
    local_cassette(strrep("x", 400))
  })

  expect_snapshot(
    error = TRUE,
    local({
      local_cassette("foo")
      local_cassette("foo")
    })
  )
})


test_that("local_cassette sets up temporary cassette", {
  local_vcr_configure(warn_on_empty_cassette = FALSE)
  expect_equal(current_cassette(), NULL)

  local({
    local_cassette("foo")
    expect_equal(current_cassette()$name, "foo")
  })

  expect_equal(current_cassette(), NULL)
})

test_that("local_cassette sets env vars", {
  local_vcr_configure(dir = withr::local_tempdir())

  expect_false(is_recording())
  expect_false(is_replaying())

  local({
    local_cassette("test")
    expect_true(is_recording())
    expect_false(is_replaying())
    httr::GET(hb("/get"))
  })

  local({
    local_cassette("test")
    expect_false(is_recording())
    expect_true(is_replaying())
    httr::GET(hb("/get"))
  })
})

test_that("can control output directory directly", {
  dir1 <- withr::local_tempdir()
  dir2 <- withr::local_tempdir()

  local_vcr_configure(dir = dir1)
  local({
    local_cassette("test", dir = dir2)
    httr::GET(hb("/get"))
  })

  expect_false(file.exists(file.path(dir1, "test.yml")))
  expect_true(file.exists(file.path(dir2, "test.yml")))
})

Try the vcr package in your browser

Any scripts or data that you put into this service are public.

vcr documentation built on Aug. 8, 2025, 6:45 p.m.