Опитвам се да напиша тест за приложение, написано с play framework 2.4 и scala. Източникът е достъпен тук
Опитвам се да напиша тестове, които да работят с целия стек. Ние работим с база данни neo4j, достъпна чрез REST API.
Ето моят тест:
package integration
import org.specs2.mutable._
import org.specs2.specification._
import play.api.test.Helpers._
import play.api.test._
import setup.TestSetup
class PublicAPISpec extends Specification with BeforeEach {
def before = TestSetup.populateNeo4JData()
"The score feedback badge api" should {
"deliver a correct svg file" in {
running(FakeApplication()) {
val svg = route(FakeRequest(GET, "/api/badges/github/test/test.svg")).get
status(svg) must equalTo(OK)
contentType(svg) must beSome.which(_ == "image/svg+xml")
}
}
}
}
Ето моето проследяване на стека:
[info] The score feedback badge api should
[error] ! deliver a correct svg file
[error] There is no started application (Play.scala:71)
[error] play.api.Play$$anonfun$current$1.apply(Play.scala:71)
[error] play.api.Play$$anonfun$current$1.apply(Play.scala:71)
[error] play.api.Play$.current(Play.scala:71)
[error] setup.TestSetup$.setup$TestSetup$$cypher(TestSetup.scala:80)
[error] setup.TestSetup$.clearNeo4JData(TestSetup.scala:23)
[error] setup.TestSetup$.populateNeo4JData(TestSetup.scala:32)
[error] integration.PublicAPISpec.before(PublicAPISpec.scala:15)
[error] integration.PublicAPISpec.before(PublicAPISpec.scala:13)
Редактиране Оказва се, че проследяването на стека очевидно показва, че основният проблем е в класа TestSetup. Този клас зависи от изпълнението на приложението за игра, докато не трябва. След известен рефакторинг, сега работи като чар.