I'm trying to figure out how to test multiple URLs in the Play framework using specs2 and I can't seem to figure out the proper way to do it without starting multiple servers.
import org.specs2.mutable._
import play.api.test._
import play.api.test.Helpers._
import play.api.libs.ws.WS
class testServer extends Specification {
running(TestServer(9000)) {
"Server starts" in {
await(WS.url("http://localhost:9000").get).status must equalTo(OK)
}
"Who" in {
await(WS.url("http://localhost:9000/url1").get).status must equalTo(OK)
}
"How" in {
await(WS.url("http://localhost:9000/url2").get).status must equalTo(OK)
}
"Why" in {
await(WS.url("http://localhost:9000/url3").get).status must equalTo(OK)
}
"Test4" in {
await(WS.url("http://localhost:9000/url4").get).status must equalTo(OK)
}
"Test" in {
await(WS.url("http://localhost:9000/url5").get).status must equalTo(OK)
}
"Help" in {
await(WS.url("http://localhost:9000/url6").get).status must equalTo(OK)
}
"Bogus" in {
await(WS.url("http://localhost:9000/url7").get).status must equalTo(OK)
}
}
}
See the answer to this question. You need to create a new context for each example. For instance you can write:
import org.specs2._
import execute._
import specification.AroundExample
class testServer extends Specification with AroundExample {
def around[R <% Result](r: =>R) =
running(TestServer(9000))(r)
"Server starts" in {
await(WS.url("http://localhost:9000").get).status must equalTo(OK)
}
...
}