2016-12-04 20 views
0

私は、外部クライアントがアクセスしているかのように私のサービスをテストするための統合テストを作成したいプレイフレームワーク2.5統合テストは2.5

の上にRESTサービスを構築しています。ドキュメントhereを使用して

- 私はそう 'アプリ' を私のテストクラスでOneServerPerSuite混合し、オーバーライド:。

暗黙のオーバーライド怠惰ヴァル・アプリは=新しいGuiceApplicationBuilderを()(ビルド)

ルータの設定を無効にしたくないと思っています。

import org.scalatest.FreeSpec 

import org.scalatestplus.play.OneServerPerSuite 
import play.api.inject.guice.GuiceApplicationBuilder 
import play.api.libs.ws.WSClient 

import scala.concurrent.Await 
import scala.concurrent.duration.Duration 


class ServerIntegration extends FreeSpec with OneServerPerSuite { 


    implicit override lazy val app = new GuiceApplicationBuilder().build() 


    "Server" - { 
    "When requested for a reply" - { 
     "should give it" in { 

     val ws = app.injector.instanceOf[WSClient] 

     val resonseFuture = ws.url(s"http://localhost:$port/my/defined/route").get() 

     val result = Await.result(resonseFuture, Duration.Inf) 

     println(result) 
     }}} } 

私はHTTPサーバーを起動できたようですが、私のルートは定義されていません。私は「アクションが見つかりませんでした」という返信をしています(ステータス404)。

通常のサーバー(「sbt run」)を実行すると、(ブラウザーを使用して)定義されたすべてのアクションにアクセスできます。

答えて

0

私のバグを発見しました。それは愚かだけど、他の人に役に立つかもしれません:私のconf/routesファイルで

、私は、@でルートを定義したので、のような:

GET /       @com.company.service.controllers.serviceController.index 

これはルートが静的であることを引き起こし、それがwasnなぜthatsの注入された(GuiceApplicationBuilderをビルドするとき)。

0

コードは完全に正しいです。

プロジェクトに入ればそのまま動作します。

あなたはplay-scalaテンプレートから作成して新しいプロジェクトを、それをチェックし、結果はそう

[info] Server 
[info] When requested for a reply 
AhcWSResponse(200, OK) 
[info] - should give it 
[info] application - ApplicationTimer demo: Stopping application at 2016-12-04T19:44:03.761Z after 0s. 

ある

val resonseFuture = ws.url(s"http://localhost:$port/count").get()

ようcountにテスト中にURLを変更することができます - もう一度URLをご確認ください