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).
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.