Тест PlaySpec пройден, хотя результат не совпадает - PullRequest
0 голосов
/ 09 июня 2018

Я написал следующую спецификацию.Удивительно, но это проходит, хотя результат не соответствует

фрагменту кода

  val controller = new UserController(mockUserRepository,mockControllerComponents,mockSilhouette)
  //val request = FakeRequest[AnyContentAsJson]("POST", "/ws/users/signup").withJsonBody(Json.parse("""{"bad": "field"}"""))//FakeRequest(POST,"/ws/users/signup").withJsonBody(Json.parse("""{"bad":"field"}"""));
  val request = FakeRequest("POST","ws/users/signup")
  println("sending request",request)
  //val result = controller.someMethod()
  val result = controller.signupUser(request)

  Await.result(result,Duration("10 secs"))
  result.map(response => {
    println("response from controller:"+response)
    response mustBe play.api.mvc.Results.BadRequest
  })

отпечаткам консоли (sending request,POST ws/users/signup)

печати в контроллере.(received request,POST ws/users/signup)

Контроллер возвращает 200OK, но я сопоставляю его с BadRequest.Тем не менее тест проходит!response from controller:Result(200, Map())

Я подозреваю, что не правильно сопоставляю результат.Я делаю response mustBe play.api.mvc.Results.BadRequest.Я знаю, что response это Results, но BadRequest это Status.Но я не знаю, как еще соответствовать, а также почему тест не проходит.Я также попробовал следовать и могу видеть, что значения отличаются, но даже тогда тест проходит успешно.

  println("response from controller:"+response.header.status+" compared with "+play.api.mvc.Results.BadRequest.header.status)
        response.header.status mustBe play.api.mvc.Results.BadRequest.header.status

консольная печать - response from controller:200 compared with 400

1 Ответ

0 голосов
/ 09 июня 2018

Импортирование членов объекта Helpers подобно этому

import play.api.test.Helpers._

предоставляет доступ к различным служебным методам для извлечения результатов из Future[Result] в тестах.Например, Helpers.status можно использовать для извлечения кода состояния следующим образом:

val result: Future[Result] = controller.signupUser(request)
status(result) mustBe BAD_REQUEST

Другой вариант - использовать whenReady из ScalaFutures :

val result: Future[Result] = controller.signupUser(request)
whenReady(result) { _.header.status mustBe BAD_REQUEST }

Другой вариант - расширить AsyncWordSpec, а затем вы можете отобразить на Future, например, так:

val result: Future[Result] = controller.signupUser(request)
result.map(_.header.status mustBe BAD_REQUEST)
...