Ga naar inhoud

Testen

Vapor bevat een module genaamd XCTVapor die test helpers biedt, gebouwd op XCTest. Deze test helpers stellen u in staat om test verzoeken naar uw Vapor applicatie te sturen, programmatisch of draaiend over een HTTP server.

Aan De Slag

Om de XCTVapor module te gebruiken, zorg ervoor dat deze is toegevoegd aan het test target van uw pakket.

let package = Package(
    ...
    dependencies: [
        .package(url: "https://github.com/vapor/vapor.git", from: "4.0.0")
    ],
    targets: [
        ...
        .testTarget(name: "AppTests", dependencies: [
            .target(name: "App"),
            .product(name: "XCTVapor", package: "vapor"),
        ])
    ]
)

Voeg dan import XCTVapor toe aan de top van uw test bestanden. Maak klassen die XCTestCase uitbreiden om testgevallen te schrijven.

import XCTVapor

final class MyTests: XCTestCase {
    func testStub() throws {
        // Test hier.
    }
}

Elke functie die begint met test zal automatisch worden uitgevoerd wanneer uw app wordt getest.

Tests Uitvoeren

Gebruik cmd+u met het -Package schema geselecteerd om tests in Xcode uit te voeren. Gebruik swift test --enable-test-discovery om te testen via de CLI.

Testbare Applicatie

Initialiseer een instantie van Application met behulp van de .testing omgeving. Je moet app.shutdown() aanroepen voordat deze applicatie de-initialiseert.
De shutdown is nodig om de resources die de app heeft geclaimd vrij te geven. In het bijzonder is het belangrijk om de threads vrij te geven die de applicatie aanvraagt bij het opstarten. Als je shutdown() niet aanroept op de app na elke unit test, kan je testsuite crashen met een precondition failure bij het toewijzen van threads voor een nieuwe instantie van Application.

let app = Application(.testing)
defer { app.shutdown() }
try configure(app)

Geef de Application door aan de configure(_:) methode van uw package om uw configuratie toe te passen. Eventuele test-only configuraties kunnen daarna worden toegepast.

Verzoek Versturen

Om een test verzoek naar je applicatie te sturen, gebruik je de test methode.

try app.test(.GET, "hello") { res in
    XCTAssertEqual(res.status, .ok)
    XCTAssertEqual(res.body.string, "Hello, world!")
}

De eerste twee parameters zijn de HTTP methode en URL om op te vragen. De afsluiter achteraan accepteert de HTTP respons die je kunt verifiëren met XCTAssert methoden.

Voor meer complexe verzoeken, kunt u een beforeRequest closure toevoegen om headers te wijzigen of inhoud te coderen. Vapor's Content API is beschikbaar op zowel het test request als het antwoord.

try app.test(.POST, "todos", beforeRequest: { req in
    try req.content.encode(["title": "Test"])
}, afterResponse: { res in
    XCTAssertEqual(res.status, .created)
    let todo = try res.content.decode(Todo.self)
    XCTAssertEqual(todo.title, "Test")
})

Testbare Methode

Vapor's test API ondersteunt het versturen van test verzoeken programmatisch en via een live HTTP server. U kunt aangeven welke methode u wilt gebruiken door gebruik te maken van de testable methode.

// Gebruik programmatische testen.
app.testable(method: .inMemory).test(...)

// Voer testen uit via een live HTTP server.
app.testable(method: .running).test(...)

De inMemory optie wordt standaard gebruikt.

De running optie ondersteunt het doorgeven van een specifieke poort om te gebruiken. Standaard wordt 8080 gebruikt.

.running(port: 8123)