diff --git a/actix-multipart/src/form/mod.rs b/actix-multipart/src/form/mod.rs
index 6fbdfa1a1..68cdefec5 100644
--- a/actix-multipart/src/form/mod.rs
+++ b/actix-multipart/src/form/mod.rs
@@ -40,7 +40,7 @@ pub trait FieldReader<'t>: Sized + Any {
/// `next()`/`try_next()`) may panic after the payload is exhausted. If this is a problem for
/// your implementation of this method, you should [`fuse()`] the `Field` first.
///
- /// [`fuse()`]: https://docs.rs/futures-util/0.3/futures_util/stream/trait.StreamExt.html#method.fuse
+ /// [`fuse()`]: futures_util::stream::StreamExt::fuse()
fn read_field(req: &'t HttpRequest, field: Field, limits: &'t mut Limits) -> Self::Future;
}
diff --git a/actix-test/README.md b/actix-test/README.md
new file mode 100644
index 000000000..1a9b6f22a
--- /dev/null
+++ b/actix-test/README.md
@@ -0,0 +1,45 @@
+# `actix-test`
+
+
+
+[![crates.io](https://img.shields.io/crates/v/actix-test?label=latest)](https://crates.io/crates/actix-test)
+[![Documentation](https://docs.rs/actix-test/badge.svg?version=0.1.5)](https://docs.rs/actix-test/0.1.5)
+![Version](https://img.shields.io/badge/rustc-1.72+-ab6000.svg)
+![MIT or Apache 2.0 licensed](https://img.shields.io/crates/l/actix-test.svg)
+
+[![dependency status](https://deps.rs/crate/actix-test/0.1.5/status.svg)](https://deps.rs/crate/actix-test/0.1.5)
+[![Download](https://img.shields.io/crates/d/actix-test.svg)](https://crates.io/crates/actix-test)
+[![Chat on Discord](https://img.shields.io/discord/771444961383153695?label=chat&logo=discord)](https://discord.gg/NWpN5mmg3x)
+
+
+
+
+
+Integration testing tools for Actix Web applications.
+
+The main integration testing tool is [`TestServer`]. It spawns a real HTTP server on an unused port and provides methods that use a real HTTP client. Therefore, it is much closer to real-world cases than using `init_service`, which skips HTTP encoding and decoding.
+
+## Examples
+
+```rust
+use actix_web::{get, web, test, App, HttpResponse, Error, Responder};
+
+#[get("/")]
+async fn my_handler() -> Result {
+ Ok(HttpResponse::Ok())
+}
+
+#[actix_rt::test]
+async fn test_example() {
+ let srv = actix_test::start(||
+ App::new().service(my_handler)
+ );
+
+ let req = srv.get("/");
+ let res = req.send().await.unwrap();
+
+ assert!(res.status().is_success());
+}
+```
+
+
diff --git a/actix-test/src/lib.rs b/actix-test/src/lib.rs
index 803320607..9be99978d 100644
--- a/actix-test/src/lib.rs
+++ b/actix-test/src/lib.rs
@@ -5,6 +5,7 @@
//! real-world cases than using `init_service`, which skips HTTP encoding and decoding.
//!
//! # Examples
+//!
//! ```
//! use actix_web::{get, web, test, App, HttpResponse, Error, Responder};
//!
diff --git a/justfile b/justfile
index 530bf5f64..2ea6031f8 100644
--- a/justfile
+++ b/justfile
@@ -80,6 +80,7 @@ doc-watch:
update-readmes: && fmt
cd ./actix-files && cargo rdme --force
cd ./actix-router && cargo rdme --force
+ cd ./actix-test && cargo rdme --force
# Check for unintentional external type exposure on all crates in workspace.
check-external-types-all toolchain="+nightly":