I have the following Play (Scala) code:
object Experiment extends Controller {
//routes file directs /genki here
def genki(name: String) = Action(pipeline(name))
def pipeline(name: String) = {
req:play.api.mvc.RequestHeader => {
val template = views.html.genki(name)
Experiment.Status(200).apply(template).as("text/html")
}
}
def simple = Action {
SimpleResult(
header = ResponseHeader(200, Map(CONTENT_TYPE -> "text/plain")),
body = Enumerator("Hello World!".getBytes())
)
}
}
This compiles fine and works as expected.
Using the scala REPL how can I display the actual html?
I have:
scala> val action = simple
action: play.api.mvc.Action[play.api.mvc.AnyContent] = Action(parser=BodyParser(anyContent))
which I take to mean that now the value reference 'action' in the REPL is an Action object which is type-constrained for AnyContent (is that correct way to say it?).
how can I now use this Action to print out the Http Response html content?
Many thanks
Rather than the manual result extraction vptheron describes, you can use
play.api.test.Helpers
:There's also
contentAsString
etc.Building on the answer by Huw, here is the full working code:
You will need to include the following libraries (not included by default in Play):
play-test_2.11.jar
,selenium-java.jar
,selenium-api.jar
,selenium-chrome-driver.jar
,selenium-firefox-driver.jar
,selenium-remote-driver.jar
,selenium-htmlunit-driver.jar
,fluentlenium-core.jar
,htmlunit-core-js.jar
andhtmlunit.jar
. These are available in the Play or Activator distribution. You can also add a dependency in build.sbt as explained here.Action
does not have a content since it's an object that you can use to apply aRequest
and get a result.Note that for your example an empty request is enough since you don't use it.
Also, notice that
body
fromSimpleResult
is anEnumerator
, you need to apply anIteratee
to it, here I'm just applying a consumer to get the whole list. The 2Await.result
are used:Future[SimpleResult]
to be completeEnumerator
to be done sending data to theIteratee
.