Study
Vapor

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

Editor Latihan

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.