【问题标题】:How to Unit test a controller in Play/Scala如何在 Play/Scala 中对控制器进行单元测试
【发布时间】:2016-08-31 22:14:32
【问题描述】:

我在尝试测试向 API 发送 POST 请求的控制器时遇到问题。我尝试了不同的测试方法,但我一直得到相同的“400”响应。我相信 json val 的格式是正确的,因为我已经使用 Swagger 对其进行了测试并且效果很好。任何人都可以帮助我了解我在这里缺少什么。非常感谢。

val json: JsValue = Json.parse("""[{"id":"1","address":"my address"}]""")
val mockAddressFinder = mock(classOf[AddressFinder])

"Example test" should {
  "should be valid" in {
   val controller = new Match(mockAddressFinder)
   val results = controller.match.apply(FakeRequest(
    POST,
      "test/test",
      FakeHeaders(Seq("Content-type"->("application/json"))),
    json
   ))
   results.onComplete {
    case Success(_) => results.map(s => println("hello" + s.header.status))
    case _=> println("did not work")
  }
}

【问题讨论】:

  • 你在扩展哪些类?

标签: scala unit-testing playframework


【解决方案1】:

你可以试试这个。这对我有用。

   val fakeRequest = FakeRequest(POST, "/someUrl", FakeHeaders(), AnyContentAsJson(Json.parse("""[{"id":"1","address":"my address"}]""")))
   val futureResult: Future[Result] = route(application, fakeRequest).get
   val resultJson: JsValue = contentAsJson(futureResult)(Timeout(2, TimeUnit.SECONDS))
   resultJson.toString mustBe """{"status":"success"}"""

【讨论】:

  • 您使用的application 配置是什么?你在延长一些课程吗?请提供更多背景信息。
【解决方案2】:

是否匹配控制器中的方法?

我认为你应该这样做

controller.match()(FakeRequest....)

controller.match() 应该返回一个Action,这是一个从请求到结果的函数。对于这个函数,你应该传递你的虚假请求。

【讨论】:

  • 欢迎来到 Stack Overflow! How to Answer 可以帮助您编写将被接受和赞成的答案。
猜你喜欢
  • 1970-01-01
  • 2017-11-14
  • 2014-04-12
  • 2017-12-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多