2012-12-31 44 views
3

我的play framework應用程序是scala(不是Java)。我找到了一個頁面來描述如何使用工具類play.test.Helpers進行單元測試。這個例子是在Java中,而不是scala。我用scala編寫了測試,但是我收到錯誤消息:這不是JavaAction,不能用這種方式調用。如何在Play 2.0框架中編寫獨立的路由單元測試?

這裏是我發現的描述發揮Framework 2.0的單元測試路線是怎麼頁:http://digitalsanctum.com/2012/05/28/play-framework-2-tutorial-testing/

...這裏是我試着寫來測試我的應用程序的代碼:

package conf 
import org.scalatest._ 
import play.mvc.Result 
import play.test.Helpers._ 

class routeTest extends FunSpec with ShouldMatchers { 

    describe("route tests") { 
    it("") { 
     // routeAndCall() fails. Message: This is not a JavaAction and can't be invoked this way. 
     val result = routeAndCall(fakeRequest(GET, "/")) 
     result should not be (null) 
    } 
    } 
} 

問題是因爲我的行爲是Scala而不是Java?我可以通過Scala控制器單元測試我的路線嗎?

回答

6

您應該使用從Scala代碼進口的play.api.*play.*是一個Java API。所以,你的代碼應該是這樣的:

package conf 

import org.scalatest._ 
import org.scalatest.matchers._ 
import play.api._ 
import play.api.mvc._ 
import play.api.test.Helpers._ 
import play.api.test._ 

class routeTest extends FunSpec with ShouldMatchers { 
    describe("route tests") { 
    it("GET/should return result") { 
     val result = routeAndCall(FakeRequest(GET, "/")) 
     result should be ('defined) 
    } 
    } 
} 

甚至更​​好使用FlatSpec

package conf 

import org.scalatest._ 
import org.scalatest.matchers._ 
import play.api._ 
import play.api.mvc._ 
import play.api.test.Helpers._ 
import play.api.test._ 

class routeTest extends FlatSpec with ShouldMatchers { 

    "GET /" should "return result" in { 
    val result = routeAndCall(FakeRequest(GET, "/")) 
    result should be ('defined) 
    } 

    it should "return OK" in { 
    val Some(result) = routeAndCall(FakeRequest(GET, "/")) 
    status(result) should be (OK) 
    } 

} 

此外,routeAndCall沒有返回null。它返回Option[Result],即Some[Result]None,因此在這種情況下空檢查不起作用。

+0

謝謝!我想知道play.api。*和play。*之間的區別,但從未遇到過問題。非常感謝。一個小小的改變:我發現「fakeRequest(GET。」/)「需要是」FakeRequest(GET。「/)」,但其他一切都很完美。再次感謝。 –

相關問題