mirror of https://github.com/vapor/docs.git
99 lines
3.1 KiB
Markdown
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)
|
|
```
|