§機能テストを書く
§テンプレートのテスト
テンプレートは Scala の標準的な関数であるため、テスト内で呼び出してその結果をチェックすればよいでしょう。
"render index template" in {
val html = views.html.index("Coco")
contentType(html) must equalTo("text/html")
contentAsString(html) must contain("Hello Coco")
}
§コントローラのテスト
テストしたい Action
に FakeRequest
を渡すことで、コードを実行することができます。
"respond to the index Action" in {
val result = controllers.Application.index("Bob")(FakeRequest())
status(result) must equalTo(OK)
contentType(result) must beSome("text/html")
charset(result) must beSome("utf-8")
contentAsString(result) must contain("Hello Bob")
}
§ルータのテスト
Action
を直接的に呼び出す代わりに、 Router
に呼び出させることもできます。
"respond to the index Action" in {
val Some(result) = route(FakeRequest(GET, "/Bob"))
status(result) must equalTo(OK)
contentType(result) must beSome("text/html")
charset(result) must beSome("utf-8")
contentAsString(result) must contain("Hello Bob")
}
§テスト内で HTTP サーバを起動する
場合によっては、 HTTP スタック全体を通したテストを書きたいことがあると思います。その場合、テストサーバを起動するとよいでしょう。
"run in a server" in new WithServer {
await(WS.url("http://localhost:" + port).get).status must equalTo(OK)
}
port
の値はサーバが起動するポート番号で、デフォルトは 19001 です。変更するためには WithServer
の引数でポート番号を指定するか、システムプロパティ testserver.port
を設定してください。この設定は、 CI サーバからテストを実行するためにビルド毎に動的にポート番号を変更したいような場合にも有用です。
"run in a server" in new WithServer(port = 3333, app = FakeApplication(additionalConfiguration = inMemoryDatabase)) {
await(WS.url("http://localhost:3333").get).status must equalTo(OK)
}
§Web ブラウザを通してテストする
ブラウザを経由してアプリケーションのテストを行いたい場合、 Selenium WebDriver を使うとよいでしょう。 WebDriver は Play によって起動されて、 FluentLenium が提供する便利な API へ既にラップされた状態で利用できます。
"run in a browser" in new WithBrowser {
browser.goTo("/")
browser.$("#title").getTexts().get(0) must equalTo("Hello Guest")
browser.$("a").click()
browser.url must equalTo("/")
browser.$("#title").getTexts().get(0) must equalTo("Hello Coco")
}
WithServer
と同様に、ポート番号や FakeApplication
、利用するブラウザなどを変更できます。
"run in a browser" in new WithBrowser(browser = FIREFOX) {
...
}
次ページ: より高度なトピック
このドキュメントの翻訳は Play チームによってメンテナンスされているものではありません。 間違いを見つけた場合、このページのソースコードを ここ で確認することができます。 ドキュメントガイドライン を読んで、お気軽にプルリクエストを送ってください。