我在尝试测试向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")
}
}
答案 0 :(得分:3)
你可以试试这个。这对我有用。
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"}"""
答案 1 :(得分:0)
匹配控制器中的方法吗?
我认为你应该这样做
controller.match()(FakeRequest....)
controller.match()
应该返回Action
,这是从请求到结果的函数。对于此功能,您应该传递您的虚假请求。