Documentation

You are viewing the documentation for the 2.0.8 release in the 2.0.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")
}

§コントローラのテスト

FakeRequest を渡せば、どんな Action コードでも実行することができます。

"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) = routeAndCall(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 {
  running(TestServer(3333)) {
  
    await(WS.url("http://localhost:3333").get).status must equalTo(OK)
  
  }
}

§Web ブラウザからテストする

ブラウザを通してアプリケーションをテストしたい場合、 Selenium WebDriver を使うことができます。Play は WebDriver を起動した上で、 FluentLenium が提供する便利な API にラップします。

"run in a browser" in {
  running(TestServer(3333), HTMLUNIT) { browser =>
    
    browser.goTo("http://localhost:3333")
    browser.$("#title").getTexts().get(0) must equalTo("Hello Guest")
    
    browser.$("a").click()
    
    browser.url must equalTo("http://localhost:3333/Coco")
    browser.$("#title").getTexts().get(0) must equalTo("Hello Coco")

  }
}

次ページ: 上級者向けのトピック