0
pub struct TestApp {
    pub address: String,
    pub pool: PgPool,
}

async fn spawn_app() -> TestApp {
    let listener = TcpListener::bind("127.0.0.1:0").expect("failed to bind to the port");
    let port = listener.local_addr().unwrap().port();
    let address = format!("127.0.0.1:{}", port);

    let configuration = get_configuration().expect("failed to read configuration");
    let connection_pool = PgPool::connect(&configuration.database.connection_string()).await.expect("failed to connect to postgres");
    let server = run(listener, connection_pool.clone()).expect("failed to bind to address");
    let _ = tokio::spawn(server);
    TestApp{
        address,
        pool: connection_pool,
    }
}

I am following the zero to production book. This test function used to work before and now i run cargo test i get the following error.

#[tokio::test]
async fn health_check_works() {
    let app = spawn_app().await;
    let client = reqwest::Client::new();
    let response = client
        .get(&format!("{}/health_check",&app.address))
        .send()
        .await
        .expect("Failed to execute request.");
    assert!(response.status().is_success());
    assert_eq!(Some(0), response.content_length());
}
thread 'health_check_works' panicked at 'Failed to execute request.: reqwest::Error { kind: Builder, source: RelativeUrlWithoutBase }', tests/health_check.rs:36:10

What is the issue and how do i solve it?

  • Can you print the whole URI you pass to `Client::get`? Looks to me like it is badly formatted. Also, you probably have to add the scheme to your URI, like `.get(&format!("http://{}/health_check", &app.address))` – Jonas Fassbender May 24 '23 at 11:43
  • sorry that was a typo in my question, in the actual code i have that just like you have stated, i edited it now. the output of ```&app.address``` is ```127.0.0.1:38501``` and in the get function i finally pass the uri as ```127.0.0.1:38501/health_check``` – Sarang Dutta May 24 '23 at 11:51

1 Answers1

2

The URL must start with a protocol (http:// or https://):

.get(&format!("http://{}/health_check",&app.address))
Chayim Friedman
  • 47,971
  • 5
  • 48
  • 77