httpmock
allows you to mock HTTP services in your Rust tests, such as third-party APIs, authentication providers, or data sources.
The following is a basic example of how you can use httpmock
to mock HTTP endpoints in your tests.
Let’s start off by adding the httpmock
crate to Cargo.toml
:
httpmock = " 0.8.0-alpha.1 "
You can then use it as follows:
use httpmock :: prelude ::* ;
// Start a lightweight mock server.
let server = MockServer :: start ();
// Create a mock on the server.
let hello_mock = server . mock ( | when , then | {
. query_param ( " word " , " hello " );
. header ( " content-type " , " text/html; charset=UTF-8 " )
// Send an HTTP request to the mock server. This simulates your code.
let response = reqwest :: blocking :: get ( server . url ( " /translate?word=hello " )) . unwrap ();
// Ensure the specified mock was called.
// Ensure the mock server did respond as specified.
assert_eq! ( response . status (), 200 );
use httpmock :: prelude ::* ;
// Start a lightweight mock server.
let server = MockServer :: start_async () . await ;
// Create a mock on the server.
let hello_mock = server . mock_async ( | when , then | {
. query_param ( " word " , " hello " );
. header ( " content-type " , " text/html; charset=UTF-8 " )
// Send an HTTP request to the mock server. This simulates your code.
let client = reqwest :: Client :: new ();
let response = client . get ( server . url ( " /translate?word=hello " )) . send () . await . unwrap ();
// Ensure the specified mock was called exactly one time (or fail with a
// detailed error description).
// Ensure the mock server did respond as specified.
assert_eq! ( response . status (), 200 );
The above example will spin up a lightweight HTTP mock server and configure it to respond to all GET
requests
to path /translate
with query parameter word=hello
. The corresponding HTTP response will contain the text body
Привет
.
If the mock server receives a request that does not match the specified criteria
(i.e., the request does not have path /translate
with query parameter word=hello
),
then the mock server will respond with status code 404 (Not Found)
.