actix / actix/actix-web

Add support to be able to test the route tree using `match_pattern` and `match_name`.

Open
#3,286 2 comments 0 reactions 0 assignees View on GitHub
Dominant language
Rust
Stars
24.8k
Forks
1.9k
Avg merge
23h 10m
Merged PRs (30d)
26

Description

So currently the test requests does not seem to implement the match functions - `match_pattern`/`match_name`.
Consider the below app having two services:
```rust
#[get("/hello/{name}", name = "greet")]
async fn greet(name: web::Path) -> impl Responder {
format!("Hello {name}!")
}

#[get("/hello/me", name = "greet_me")]
async fn greet_me() -> impl Responder {
format!("Hi Developer!")
}
```
And a test like this:
```rust
#[actix_web::test]
async fn test_index_get() {
let _app = test::init_service(App::new().service(greet).service(greet_me)).await;
let req = test::TestRequest::get()
.uri("/hello/john")
.insert_header(ContentType::plaintext())
.to_srv_request();

println!("{:?}", req.match_pattern());
println!("{:?}", req.match_name());
assert!(true);
}
```

## Expected Behavior

`match_pattern` should print the matching route url/path, in this case: "/hello/{name}"
`match_name` should print the given name to the service, in this case: "greet"

## Current Behavior

Both `match_pattern` and `match_name` returns None.

## Context

We can use these functions to test if the user has registered the services in the correct order as he/she intended and the user requests are in fact routing to correct handlers.

Currently, if user had registered the `greet` service before `greet_me` service and a user sends the request to `/hello/me` it will send `"Hello me!`` whereas it should have returned `"Hi Developer!".
That's what we wanted to test, Additional Context: https://github.com/qdrant/qdrant/issues/3547.

## Your Environment

- Rust Version: rustc 1.75.0 (82e1608df 2023-12-21)
- Actix Web Version: 4

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.