vapor-docs/docs/advanced/testing.nl.md

99 lines
3.1 KiB
Markdown

# 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.
```swift
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.
```swift
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.
```swift
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.
```swift
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](../basics/content.md) is beschikbaar op zowel het test request als het antwoord.
```swift
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.
```swift
// 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.
```swift
.running(port: 8123)
```