Study
Actix

Testing dengan actix_web::test

Penjelasan

Actix-web menyediakan modul `actix_web::test` untuk menulis integration test terhadap handler tanpa perlu benar-benar menjalankan server di port network. Kamu membuat request test dengan `test::TestRequest`, mengirimkannya ke service aplikasi lewat `test::call_service`, lalu memverifikasi status code dan body response. Test ini dijalankan dengan `#[actix_web::test]` (bukan `#[test]` biasa) karena handler bersifat async dan butuh runtime Actix untuk berjalan.

Contoh Konsep

#[cfg(test)]
mod tests {
    use actix_web::{test, App};
    use super::*;

    #[actix_web::test]
    async fn test_hello_endpoint() {
        let app = test::init_service(App::new().service(hello)).await;
        let req = test::TestRequest::get().uri("/").to_request();
        let resp = test::call_service(&app, req).await;

        assert!(resp.status().is_success());
    }
}

Praktikum

Lengkapi test agar memverifikasi response endpoint "/" berhasil (status sukses).

Editor Latihan

Ketik/edit bebas di sini untuk latihan — kode ini tidak dijalankan.

Tips

Untuk test yang memverifikasi isi body JSON, pakai `test::read_body_json(resp).await` untuk deserialize response langsung ke struct Rust, lebih rapi dibanding parsing string JSON secara manual di dalam test.