Documentation

You are viewing the documentation for the 2.2.x release series. The latest stable release series is 2.4.x.

§機能テストを書く

Play は機能テストを支援するいくつかのクラスとメソッドを提供しています。それらのほとんどは play.api.test パッケージか、Helpers オブジェクトのいずれかの中から見つけることができます。

以下をインポートすることで、これらのメソッドとクラスを追加することができます:

import play.api.test._
import play.api.test.Helpers._

§FakeApplication

Play はしばしば、play.api.Play.current が提供する Application をコンテキストとして実行することを要求します:

テスト用の環境を提供するために、Play は 本番用とは異なる Global オブジェクトや追加設定、さらには追加プラグインにより設定することのできる FakeApplication クラスを提供しています。

Unable to find label scalatest-fakeApplication in source file code/ScalaFunctionalTestSpec.scala

§WithApplication

サンプルコードにアプリケーションを渡すには、WithApplication を使います。明示的に FakeApplication を渡すこともできますが、利便性のためにデフォルトの FakeApplication が提供されています。

WithApplicationAround ブロックに組み込まれているので、自身のデータで上書きすることができます。

Unable to find label scalafunctionaltest-withdbdata in source file code/WithDbDataSpec.scala

§WithServer

ときどき、テストコードから実際の HTTP スタックをテストしたくなりますが、このような場合は WithServer を使ってテストサーバを起動することができます。

Unable to find label scalafunctionaltest-testpaymentgateway in source file code/ScalaFunctionalTestSpec.scala

port の値には、サーバが起動しているポート番号が含まれています。デフォルトは 19001 番ですが、ポート番号を WithServer のコンストラクタに渡すか、testserver.port システムプロパティに設定することで変更することができます。これにより、ビルドごとにポート番号を動的に確保することができるので、CI サーバと統合するのに便利です。

カスタムルートを設定して WS 呼び出しをテストするのに便利な FakeApplication をテストサーバに渡すこともできます:

Unable to find label scalafunctionaltest-testws in source file code/ScalaFunctionalTestSpec.scala

§WithBrowser

ブラウザを使ってアプリケーションをテストしたい場合、Selenium WebDriver が使えます。Play は WebDriver を起動し、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 を変更することができますし、使用する web ブラウザを選択することもできます:

"run in a browser" in new WithBrowser(webDriver = FIREFOX) {
  ...
}

§PlaySpecification

PlaySpecification は、Play のヘルパーメソッドと一緒に使うとクラッシュする、デフォルトの specs2 スペックが提供するいくつかのミックスインを除外します。また、利便性のため Play テストヘルパと型をミックスインします。

Unable to find label scalatest-playspecification in source file code/ExamplePlaySpecificationSpec.scala

§テンプレートのテスト

テンプレートは標準的な Scala の関数なので、テストから実行して、結果を確認することができます:

Unable to find label scalatest-functionaltemplatespec in source file code/FunctionalTemplateSpec.scala

§コントローラのテスト

FakeRequest を提供することで、あらゆる Action のコードを呼び出すことができます:

Unable to find label scalatest-functionalexamplecontrollerspec in source file code/FunctionalExampleControllerSpec.scala

§ルータのテスト

自分で Action を呼び出す代わりに、Router にこれを行わせることができます:

Unable to find label scalafunctionaltest-respondtoroute in source file code/ScalaFunctionalTestSpec.scala

§モデルのテスト

SQL データベースを使っている場合、inMemoryDatabase を使ってデータベースコネクションを H2 データベースのインメモリインスタンスに置き換えることができます。

Unable to find label scalafunctionaltest-testmodel in source file code/ScalaFunctionalTestSpec.scala

次ページ: より高度なトピック


このドキュメントの翻訳は Play チームによってメンテナンスされているものではありません。 間違いを見つけた場合、このページのソースコードを ここ で確認することができます。 ドキュメントガイドライン を読んで、お気軽にプルリクエストを送ってください。