Specs2 वापरून फंक्शन कॉल केल्याने फंक्शन कॉल होत नाही

मी Play 2.1.1 आणि Specs2 सह चाचणी केस मिळविण्यावर काम करत आहे आणि एक मनोरंजक समस्या आहे. मी कंट्रोलरला पाठवण्यासाठी FakeRequest तयार करतो, पण कंट्रोलरमधील फंक्शन कधीही कॉल होत नाही.

येथे चाचणी कोड आहे (किंचित सरलीकृत, परंतु सर्व फिरत्या भागांसह):

"controller" should {
"do something" in new WithApplication {
    val controller = new MyController()
    controller.main() { 
        new FakeRequest(
            PUT,
            routes.MyController.main().toString,
            new FakeHeaders(Seq("Content-Type" -> Seq("text/xml"))),
            AnyContentAsXml(<xml>xml</xml>)
        )
    }       
}

आणि कंट्रोलरमधील मुख्य कार्य येथे आहे (चांगले, किमान त्याची फक्त सुरुवात):

def main() = Action(BodyParsers.parse.xml) { request =>
    println("main")
}

हा कोड कधीच मुख्यवर येत नाही. विचित्र गोष्ट म्हणजे, जर मी कोणतेही पॅरामीटर्सशिवाय FakeHeader बनवले आणि AnyContentAsXml काढून टाकले, फक्त Xml घटक कंट्रोलरला पाठवले, तर ते कार्य करते:

new FakeRequest(
    PUT,
    routes.MyController.main().toString,
    new FakeHeaders,
    <xml>xml</xml>
)

हे का घडेल याची कोणाला कल्पना आहे का?


person msiebert    schedule 06.08.2013    source स्रोत


उत्तरे (1)


येथे तुमची चाचणी थोडी सुधारित आहे जी कंट्रोलरची चाचणी करण्याचे दोन मार्ग दर्शवते. AnyContentAsXml तुमच्यासाठी काम करत नाही याचे कारण तुमची चाचणी दोन दृष्टिकोन एकत्र मिसळत आहे.

"one way" in new WithApplication {
    val action = controllers.Application.main
    val req: FakeRequest[scala.xml.NodeSeq] = new FakeRequest(
            PUT,
            "some url",
            new FakeHeaders(Seq("Content-Type" -> Seq("text/xml"))),
            <xml>xml</xml>
        )
    val x = action(req)
    status(x) should beEqualTo(200)
}

"2nd way" in new WithApplication {
  val Some(result) = route(new FakeRequest("PUT", 
      "/", 
      new FakeHeaders(Seq("Content-Type" -> Seq("text/xml"))),
      AnyContentAsXml(<xml>xml</xml>)))
  status(result) should beEqualTo(200)
}

}

दुस-या पध्दतीमध्ये प्ले म्हणजे बॉडीपार्सर वापरण्यासाठी xml अनपॅक करण्याची काळजी घ्या. आणि येथे नियंत्रक आहे:

def main = Action(BodyParsers.parse.xml) { request =>
   println(">>>>>>>>>>>>>>>>>>> main")
  Ok("")
}
person Nilanjan    schedule 06.08.2013