expect_verb: Expectations for mocked HTTP requests

expect_verbR Documentation

Expectations for mocked HTTP requests

Description

The mock contexts in httptest2 can raise errors or messages when requests are made, and those (error) messages have three elements, separated by space: (1) the request method (e.g. "GET"); (2) the request URL; and (3) the request body, if present. These verb-expectation functions look for this message shape. expect_PUT, for instance, looks for a request message that starts with "PUT".

Usage

expect_GET(object, url = "", ...)

expect_POST(object, url = "", ...)

expect_PATCH(object, url = "", ...)

expect_PUT(object, url = "", ...)

expect_DELETE(object, url = "", ...)

expect_no_request(object, ...)

Arguments

object

Code to execute that may cause an HTTP request

url

character: the URL you expect a request to be made to. Default is an empty string, meaning that you can just assert that a request is made with a certain method without asserting anything further.

...

character segments of a request payload you expect to be included in the request body, to be joined together by paste0(). You may also pass any of the following named logical arguments, which will be passed to base::grepl():

  • fixed: Should matching take the pattern as is or treat it as a regular expression. Default: TRUE, and note that this default is the opposite of the default in grepl. (The rest of the arguments follow its defaults.)

  • ignore.case: Should matching be done case insensitively? Default: FALSE, meaning matches are case sensitive.

  • perl: Should Perl-compatible regular expressions be used? Default: FALSE

  • useBytes: Should matching be done byte-by-byte rather than character-by-character? Default: FALSE

Value

A testthat 'expectation'.

Examples

library(httr2)
without_internet({
  expect_GET(
    request("http://httpbin.org/get") %>% req_perform(),
    "http://httpbin.org/get"
  )
  expect_GET(
    request("http://httpbin.org/get") %>% req_perform(),
    "http://httpbin.org/[a-z]+",
    fixed = FALSE # For regular expression matching
  )
  expect_PUT(
    request("http://httpbin.org/put") %>%
      req_method("PUT") %>%
      req_body_json(list(a = 1)) %>%
      req_perform(),
    "http://httpbin.org/put",
    '{"a":1}'
  )
  # Don't need to assert the request body, or even the URL
  expect_PUT(
    request("http://httpbin.org/put") %>%
      req_method("PUT") %>%
      req_body_json(list(a = 1)) %>%
      req_perform()
  )
  expect_no_request(rnorm(5))
})

httptest2 documentation built on May 29, 2024, 8:42 a.m.