2016-12-04 120 views
0

我上播放框架2.5集成測試的遊戲框架2.5

之上構建一個REST服務,我想創建一個集成測試來測試我的服務,就好像由外部客戶端訪問。 -

使用文檔here我在我的測試類和壓倒 '應用' 使混合OneServerPerSuite:

隱覆蓋懶VAL應用=新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注入(構建GuiceApplicationBuilder時)。

0

您的代碼是完全正確的。

它的工作原理是如果放入一個項目。

您可以創建自play-scala模板檢查一個新的項目並更改測試網址count

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

結果是

[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. 

所以 - 再次查詢的網址