https://github.com/ropensci/vcr делает это довольно легко. Поддерживает интеграцию с crul
, а также httr
.
Функция, которая делает запрос API
foo_bar <- function() {
x <- crul::HttpClient$new("https://httpbin.org")
res <- x$get("get", query = list(foo = "bar"))
jsonlite::fromJSON(res$parse("UTF-8"))
}
Затем запустите любые функции внутри блока vcr::use_cassette
и выполните все тесты, которые ожидаются на выходе, как обычно
library(testthat)
test_that("my_test", {
vcr::use_cassette("foo_bar", {
aa <- foo_bar()
})
expect_is(aa, "list")
expect_named(aa, c("args", "headers", "origin", "url"))
expect_equal(aa$args$foo, "bar")
})
Запрос и ответ сохраняются в файле yaml - см. Пример https://github.com/ropensci/vcr#usage. - При первом запуске приведенного выше кода будет сделан реальный HTTP-запрос для создания этого файла yaml, НО во 2-м и всех последующих запусках после этого не будет выполнено никаких реальных HTTP-запросов, но вместо этого функция использует этот файл yaml.