scala - Play 框架 Controller 的单元测试

标签 scala playframework specs2

我编写了这个 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

现在我正在为此 Controller 编写单元测试

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())

Pre Play 2.4 中, Controller 曾经是对象。从 Play 2.4 开始,鼓励他们改为类(class)。

关于scala - Play 框架 Controller 的单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30947894/

相关文章:

scala - 如何使用 Play 和 sbt 在 CI 中使用单独的配置文件进行测试?

scala - 如何在构造函数中添加一些操作?

java - Play Framework 2.3.4 路由重定向到子项目

scala - Typesafe Play WS 作为 SBT 项目中的依赖项

java - Play框架验证: Redisplay input

json - 如何使用 JSON 转换器在 Play 上展平 js 数组?

sbt - 规范 2 的 JVM 内存设置

scala - 在 Play Framework 2.4.2 中使用 scalates/specs2 测试 HttpErrorHandler

mongodb - 使用specs2玩!使用 Reactivemongo 的虚假应用程序会导致超时

string - Scala 中每个单词的首字母大写