Vaporドキュメント学習卅八:TESTING-Basic
2714 ワード
テストの一環はソフトウェアアプリケーション開発の重要な部分であり、Vaporアプリケーションも例外ではありません.このドキュメントでは、
以前は
警告:
上でloadの論理を抽出し、
load以外で初期化を行うのは,テスト時に異なる初期化方法を選択できるためである.
まず、
Droplet(arguments: ["dummy/path/", "prepare"], ...
try drop.runCommands()
気づいたかもしれませんが、
@testable import Vapor
試験を導入した
作成が完了しました.
幸運を祈って、楽しいテストをしましょう.()
Droplet
についてテストできる基本的な設定について説明します.Displacing Droplet Creation Logic
以前は
Droplet
を作成するコードをmain.swift
に入れていました.残念なことに、テストの際、コード量が大きいため可読性が悪くなります.まず、これらのコードをAppLogic
モジュールに分解する必要があります.次はDroplet+Setup.swift
ファイルです.import Vapor
func load(_ drop: Droplet) throws {
drop.preparations.append(Todo.self)
drop.get { _ in return "put my droplet's logic in this `load` function" }
drop.post("form") { req in
...
return Response(body: "Successfully posted form.")
}
// etc.
}
警告:
load
関数でrun()
メソッドを呼び出さないでください.Update main.swift
上でloadの論理を抽出し、
App
モジュールのmain.swift
ファイルを更新する必要があります.let drop = Droplet(...)
try load(drop)
drop.run()
load以外で初期化を行うのは,テスト時に異なる初期化方法を選択できるためである.
Testable Droplet
まず、
Droplet+Test.swift
ファイルをテストtargetに追加します.内容は次のとおりです.@testable import Vapor
func makeTestDroplet() throws -> Droplet {
let drop = Droplet(arguments: ["dummy/path/", "prepare"], ...)
try load(drop)
try drop.runCommands()
return drop
}
main.swift
の初期化方法と同じように見えますが、3つの違いがあります.Droplet(arguments: ["dummy/path/", "prepare"], ...
Droplet
の作成では、arguments
は異なります.高度なシナリオでは使用者が少ないことを除いて、Droplet
がサービスを自動的に起動したり、スレッドをブロックしたりしないことを保証するために、テストで使用しました."prepare"
以外のパラメータを使用できますが、いくつかの高度なシーンで特別な機能を実行しない限り、これらのパラメータは十分です.try drop.runCommands()
気づいたかもしれませんが、
runCommands()
の代わりにrun()
を使用しました.これにより、Droplet
は、実際にsocketにバインドされたり終了したりすることなく、起動前に通常の設定をすべて実行することができる.(これは私もどのように訳すべきか分かりませんが、理解してから変更します)@testable import Vapor
試験を導入した
Vapor
は、runCommands()
メソッドが呼び出されることを保証する.現在、この方法は公開されておらず、実際の使用時に意外なバグが発生することを避ける.Test Our Droplet
作成が完了しました.
Droplet
のテストを開始できます.以下に、基本的なテストを示します.@testable import AppLogic
func testEndpoint() throws {
let drop = try makeTestDroplet()
let request = ...
let expectedBody = ...
let response = try drop.respond(to: request)
XCTAssertEqual(expectedBody, response.body.bytes)
}
CMD-U
を使用して、Xcode
の結果を持つテストをin-line
で実行できるようになりました.さらに、vapor test
コマンドを実行してコードをテストできます.swift build
コマンドを使用し、アプリケーションでMySQL
を使用する場合は、呼び出し可能な正しい構築IDであるflagを追加していることを確認します.幸運を祈って、楽しいテストをしましょう.()