Learn R Programming

⚠️There's a newer version (1.4.0) of this package.Take me there.

webfakes

Your own web server for happy HTTP testing

Lightweight fake web apps for testing. Built using the civetweb embedded web server.

Features

  • Complete web app framework, define handlers for HTTP requests in R.
  • Write your own app for your custom test cases; our use app similar to the https://httpbin.org API, so often you don’t need to write your own web app (e.g. if you are writing an HTTP client (httr, curl, crul).
  • Run one web app per test suite, per test file or per test case.
  • Flexible path matching, with parameters and regular expressions.
  • Built in templating system using glue or bring your own template engine.
  • Middleware to parse JSON, multipart and URL encoded request bodies.
  • A web app is just an R object. It can be saved to disk, copied to another R process, etc.
  • A web app is extensible, by adding new routes and middleware to it.
  • Helper functions for sending JSON, files from disk, etc.
  • App-specific environment to store any data including data from requests to the fake app.
  • After a web app is launched from R, you can interact with it from R but also from the command line, your browser, etc. Nice for debugging.
  • The web server runs in the R process, so it has no problems with local firewalls.
  • Multi-threaded web server supports concurrent HTTP requests.
  • Limit download speed to simulate low bandwidth.

Optional dependencies

  • The jsonlite package is needed for the mw_json() middleware, the response$send_json() method and the httpbin_app() app.
  • The glue package is needed for the tmpl_glue() template engine.
  • The callr package is needed for new_app_process() and local_app_process to work.
  • The /brotli endpoint of httpbin_app() needs the brotli package.
  • The /deflate endpoint of httpbin_app() needs the zip package.
  • The /digest-auth endpoint of httpbin_app() needs the digest package.
  • git_app() requires the processx package.

Installation

Install the release version from CRAN:

install.packages("webfakes")

If you need the development version of the package, install it from GitHub:

pak::pak("r-lib/webfakes")

Usage

Start a web app at the beginning of your tests or test file, and stop it after. Here is an example with the testthat package. Suppose you want to test that your get_hello() function can query an API:

local_app_process() helps you clean up the web server process after the test block, or test file. It is similar to the withr::local_* functions.

app <- webfakes::new_app()
app$get("/hello/:user", function(req, res) {
  res$send(paste0("Hello ", req$params$user, "!"))
})
web <- webfakes::local_app_process(app)

test_that("can use hello API", {
  url <- web$url("/hello/Gabor")
  expect_equal(get_hello(url), "Hello Gabor!")
})

When testing HTTP clients you can often use the built in httpbin_app():

httpbin <- webfakes::local_app_process(webfakes::httpbin_app())
test_that("HTTP errors are caught", {
  url <- httpbin$url("/status/404")
  resp <- httr::GET(url)
  expect_error(httr::stop_for_status(resp), class = "http_404")
})
#> Test passed 

Copy Link

Version

Install

install.packages('webfakes')

Monthly Downloads

24,109

Version

1.3.0

License

MIT + file LICENSE

Issues

Pull Requests

Stars

Forks

Maintainer

Gabor Csardi

Last Published

June 24th, 2025

Functions in webfakes (1.3.0)

mw_etag

Middleware that add an ETag header to the response
local_app_process

App process that is cleaned up automatically
oauth2_third_party_app

App representing the third-party app
oauth2_login

Helper function to log in to a third party OAuth2.0 app without a browser
mw_raw

Middleware to read the raw body of a request
webfakes_request

A webfakes request object
tmpl_glue

glue based template engine
oauth2_resource_app

Fake OAuth 2.0 resource and authorization app
mw_static

Middleware function to serve static files
new_regexp

Create a new regular expression to use in webfakes routes
mw_cgi

Middleware that calls a CGI script
webfakes_response

A webfakes response object
webfakes-package

webfakes: Fake Web Apps for HTTP Testing
oauth2_httr_login

Helper function to use httr's OAuth2.0 functions non-interactively, e.g. in test cases
git_app

Web app that acts as a git http server
http_time_stamp

Format a time stamp for HTTP
mw_json

Middleware to parse a JSON body
mw_log

Log requests to the standard output or other connection
mw_cookie_parser

Middleware to parse Cookies
glossary

webfakes glossary
new_app_process

Run a webfakes app in another process
new_app

Create a new web application
mw_urlencoded

Middleware to parse an url-encoded request body
mw_text

Middleware to parse a plain text body
mw_range_parser

Middleware to parse a Range header
server_opts

Webfakes web server options
mw_multipart

Parse a multipart HTTP request body
httpbin_app

Generic web app for testing HTTP clients