Unable to test controller using Action.async

后端 未结 2 1089
长情又很酷
长情又很酷 2021-01-11 12:38

I\'m trying to test controller, which is using new Action.async. Following documentation I have excluded part under controller I want to test to separate trait

2条回答
  •  没有蜡笔的小新
    2021-01-11 13:03

    For me works this:

    import concurrent._
    import play.api.libs.json._
    import play.api.mvc.{SimpleResult, Results, Controller, Action}
    import play.api.test._
    import ExecutionContext.Implicits.global
    
    trait UserController {
      this: Controller =>
      def index() = Action {
        Ok("index")
      }
    
      def register() = Action.async(parse.json) {
        request =>
          future(Ok("register: " + request.body))
      }
    }
    
    object UsersControllerSpec extends PlaySpecification with Results {
    
      class TestController() extends Controller with UserController
    
      "register action" should {
        "should be valid" in {
          val controller = new TestController()
          val request = FakeRequest().withBody(Json.obj("a" -> JsString("A"), "b" -> JsString("B")))
          val result: Future[SimpleResult] = controller.register()(request)
          /* assertions */
          contentAsString(result) === """register: {"a":"A","b":"B"}"""
        }
      }
    }
    

提交回复
热议问题