Testing dengan XCTVapor
Penjelasan
XCTVapor adalah library testing tambahan dari tim Vapor, dibangun di atas XCTest, yang menyediakan method app.test(...) untuk mengirim request tiruan ke aplikasi tanpa perlu benar-benar menjalankan server di port network. Ini membuat test route jauh lebih cepat dan terisolasi dibanding memanggil endpoint lewat HTTP client sungguhan. Pola umumnya: buat Application dalam mode .testing, panggil configure(app) supaya semua route dan middleware ter-setup, lalu panggil app.test(.GET, "path") { response in ... } untuk mengecek response.status dan response.body. Jangan lupa app.shutdown() di akhir test (biasanya lewat defer) untuk membersihkan resource.
Contoh Konsep
import XCTVapor
@testable import App
final class RouteTests: XCTestCase {
func testHello() throws {
let app = Application(.testing)
defer { app.shutdown() }
try configure(app)
try app.test(.GET, "hello") { response in
XCTAssertEqual(response.status, .ok)
XCTAssertEqual(response.body.string, "Halo dari Vapor!")
}
}
func testBuatCatatan() throws {
let app = Application(.testing)
defer { app.shutdown() }
try configure(app)
let input = BuatCatatanRequest(judul: "Test", isi: "Isi percobaan yang cukup panjang")
try app.test(.POST, "catatan", beforeRequest: { req in
try req.content.encode(input)
}, afterResponse: { response in
XCTAssertEqual(response.status, .ok)
})
}
}
Praktikum
Tulis test bernama testSapaRoute yang memanggil app.test(.GET, "sapa") dan memastikan response.status sama dengan .ok serta response.body.string sama dengan "Selamat datang di Vapor".
Ketik/edit bebas di sini untuk latihan — kode ini tidak dijalankan.
Tips
Kalau test-mu berinteraksi dengan database, gunakan database terpisah khusus testing (mis. SQLite in-memory) supaya test tidak mengubah data development/production dan bisa dijalankan berulang kali dengan hasil konsisten.