Documentation

You are viewing the documentation for the 2.1.5 release in the 2.1.x series of releases. The latest stable release series is 2.4.x.

§機能テストを書く

§テンプレートのテスト

テンプレートは Scala の標準的な関数であるため、テスト内で呼び出してその結果をチェックすればよいでしょう。

"render index template" in {
  val html = views.html.index("Coco")
  
  contentType(html) must equalTo("text/html")
  contentAsString(html) must contain("Hello Coco")
}

§コントローラのテスト

テストしたい ActionFakeRequest を渡すことで、コードを実行することができます。

"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) {
  ...
}

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