| Crates.io | mocktail |
| lib.rs | mocktail |
| version | 0.3.0 |
| created_at | 2025-03-12 16:19:56.59624+00 |
| updated_at | 2025-07-11 20:06:45.848904+00 |
| description | HTTP & gRPC server mocking for Rust |
| homepage | |
| repository | https://github.com/IBM/mocktail |
| max_upload_size | |
| id | 1589980 |
| size | 126,988 |
mocktail is a minimal crate for mocking HTTP and gRPC servers in Rust, with native support for streaming.
Add mocktail to Cargo.toml as a development dependency:
[dev-dependencies]
mocktail = "0.3.0"
Basic usage example:
use mocktail::prelude::*;
#[tokio::test]
async fn test_example() -> Result<(), Box<dyn std::error::Error>> {
// Create a mock set
let mut mocks = MockSet::new();
// Build a mock that returns a "hello world!" response
// to POST requests to the /hello endpoint with the text "world"
// in the body.
mocks.mock(|when, then| {
when.post().path("/hello").text("world");
then.text("hello world!");
});
// Create and start a mock server
let mut server = MockServer::new_http("example").with_mocks(mocks);
server.start().await?;
// Create a client
let client = reqwest::Client::builder().http2_prior_knowledge().build()?;
// Send a request that matches the mock created above
let response = client
.post(server.url("/hello"))
.body("world")
.send()
.await?;
assert_eq!(response.status(), http::StatusCode::OK);
let body = response.text().await?;
assert_eq!(body, "hello world!");
// Send a request that doesn't match a mock
let response = client.get(server.url("/nope")).send().await?;
assert_eq!(response.status(), http::StatusCode::NOT_FOUND);
// Mocks can also be registered to the server directly
// Register a mock that will match the request above that returned 404
server.mock(|when, then| {
when.get().path("/nope");
then.text("yep!");
});
// Send the request again, it should now match
let response = client.get(server.url("/nope")).send().await?;
assert_eq!(response.status(), http::StatusCode::OK);
let body = response.text().await?;
assert_eq!(body, "yep!");
// Mocks can be cleared from the server, enabling server reuse
server.mocks.clear();
Ok(())
}
See examples in the mocktail-tests crate.
This crate takes inspiration from other great mocking libraries including: