specs2 istifadə edərək funksiyaya zəng etmək funksiyanı çağırmır

Mən Play 2.1.1 və Specs2 ilə işləyən test işi əldə etmək üzərində işləyirəm və maraqlı problemlə üzləşirəm. Nəzarətçiyə göndərmək üçün FakeRequest yaradıram, lakin nəzarətçidəki funksiya heç vaxt çağırılmır.

Budur test kodu (bir qədər sadələşdirilmiş, lakin bütün hərəkət edən hissələrlə):

"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>)
        )
    }       
}

Və burada nəzarətçidəki əsas funksiya (yaxşı, heç olmasa onun başlanğıcı):

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

Bu kod heç vaxt əsas düyməni vurmur. Qəribədir ki, heç bir parametr olmadan FakeHeader düzəltsəm və AnyContentAsXml-i silsəm, sadəcə Xml Elementini nəzarətçiyə göndərsəm, o zaman işləyir:

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

Bunun niyə baş verəcəyi barədə hər hansı bir fikri varmı?


person msiebert    schedule 06.08.2013    source mənbə


Cavablar (1)


Budur, nəzarətçini sınamağın iki yolunu göstərən kiçik dəyişdirilmiş testiniz. AnyContentAsXml-in sizin üçün işləməməsinin səbəbi, testiniz iki yanaşmanı qarışdırdığı üçün.

"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)
}

}

İkinci yanaşmada Play, BodyParser-in istifadə etməsi üçün xml-nin açılmasına diqqət yetirir. Və burada nəzarətçi:

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