2015-06-19 95 views
2

我寫了這個控制器,它從瀏覽器中完美的作品單元測試播放框架控制器

package controllers 
import play.api._ 
import play.api.mvc._ 

class Application extends Controller { 

    val productMap = Map(1 -> "Keyboard", 2 -> "Mouse", 3 -> "Monitor") 

    def listProductsXML() = Action { 
    Ok(views.xml.products(productMap)) 
    } 
} 

GET  /listProducts.xml    controllers.Application.listProductsXML 

現在我正在寫一個單元測試這個控制器的路由被定義

import controllers._ 
import play.api.test.FakeRequest 
import play.api.test.Helpers._ 
import org.specs2.mutable._ 
import play.api.test.WithApplication 

class ControllerTest extends Specification { 
    "controllers.Application" should { 
     "respond with xml for /listproducts.xml requests" in new WithApplication { 
      val result = controllers.Application.listProductsXML()(FakeRequest()) 
      status(result) must equalTo(OK) 
      contentType(result) must beSome("application/xml") 
      contentAsString(result) must contain("products") 
     } 
    } 
} 

當我運行這與activator test-only我得到一個錯誤

[foo_play] $ test-only ControllerTest 
[error] ProductSpec.scala:10: object Application is not a member of package controllers 
[error] Note: class Application exists, but it has no companion object. 
[error]    val result = controllers.Application.listproductsXML()(FakeRequest()) 
[error]         ^
[error] one error found 
[error] (test:compileIncremental) Compilation failed 
[error] Total time: 1 s, completed Jun 19, 2015 3:48:14 PM 

回答

3

嘗試更換:

controllers.Application.listProductsXML()(FakeRequest()) 

與:

new controllers.Application().listProductsXML()(FakeRequest()) 

預播放2.4,以前是對象的控制器。從Play 2.4開始,鼓勵他們改爲上課。

+1

是......這樣做了。 –