[Rust, tokio, sqlx]How to test a database connection(async function)

Taka
Aug 13, 2023

Tips

Use #[tokio::test] to test a database connection using tokio, sqlx. #[tokio::test] is used for async function test.

If you prepare .env.test , read env by dotenv::filename("/path/to/env_file") , otherwise .env is loaded when running a test by default.

// function for database access
async fn create_pool_connection(database_url: String) -> Pool<Postgres> {
let pool_connection = PgPoolOptions::new()
.max_connections(5)
.connect(&database_url)
.await;

return match pool_connection {
Ok(pool) => pool,
Err(err) => panic!("Connection failure: {:?}", err),
};
}

#[cfg(test)]
mod db_connection_test {
use super::create_pool_connection;
use std::env;

#[tokio::test]
#[should_panic]
async fn connection_failure() {
dotenv::from_filename(".env.test").ok();
let database_url = env::var("WRONG_DATABASE_URL").unwrap_or("".to_string());
let pool = create_pool_connection(database_url).await;
}

#[tokio::test]
async fn connection_success() {
dotenv::from_filename(".env.test").ok();
let database_url = env::var("DATABASE_URL").unwrap_or("".to_string());
let pool = create_pool_connection(database_url).await;
}
}

Thank you.

--

--