对 Play 框架控制器进行单元测试
Unit Testing a Play framework Controller
我已经编写了这个控制器,它可以在浏览器中完美运行
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
尝试替换:
controllers.Application.listProductsXML()(FakeRequest())
与:
new controllers.Application().listProductsXML()(FakeRequest())
Play 2.4 之前,控制器曾经是对象。从 Play 2.4 开始,鼓励他们改为 类。
我已经编写了这个控制器,它可以在浏览器中完美运行
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
尝试替换:
controllers.Application.listProductsXML()(FakeRequest())
与:
new controllers.Application().listProductsXML()(FakeRequest())
Play 2.4 之前,控制器曾经是对象。从 Play 2.4 开始,鼓励他们改为 类。