Työskentelen saadakseni testitapauksen, joka toimii Play 2.1.1:n ja Specs2:n kanssa, ja olen törmännyt mielenkiintoiseen ongelmaan. Luon FakeRequestin lähetettäväksi ohjaimelle, mutta ohjaimen toimintoa ei koskaan kutsuta.
Tässä on testikoodi (hieman yksinkertaistettu, mutta kaikki liikkuvat osat):
"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>)
)
}
}
Ja tässä on ohjaimen päätoiminto (no, ainakin sen alku):
def main() = Action(BodyParsers.parse.xml) { request =>
println("main")
}
Tämä koodi ei koskaan osu mainoksi. Kummallista kyllä, jos teen FakeHeaderin ilman parametreja ja poistan AnyContentAsXml:n lähettämällä vain Xml-elementin ohjaimeen, se toimii:
new FakeRequest(
PUT,
routes.MyController.main().toString,
new FakeHeaders,
<xml>xml</xml>
)
Onko kenelläkään aavistustakaan miksi näin kävisi?