Как да правя пълни тестове за интеграция в приложение за play framework?

Опитвам се да напиша тест за приложение, написано с 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. Този клас зависи от изпълнението на приложението за игра, докато не трябва. След известен рефакторинг, сега работи като чар.


person Nicolas Joseph    schedule 10.10.2015    source източник


Отговори (1)


За да правите тестове на маршрути, трябва да имате контекста Application в теста.
Тестът трябва да започне с

"deliver a correct svg file" in new WithApplication {
....
}

Можете да видите повече за това на страницата на Play за функционални тестове.

person roterl    schedule 10.10.2015
comment
Благодаря за отговора, но получих точно същото изключение - person Nicolas Joseph; 11.10.2015
comment
Това е в клон, току-що го бутнах: ето ви. Благодаря за помощта ! - person Nicolas Joseph; 11.10.2015
comment
Мисля, че намерих източника на проблема, който изглежда като зависимост за игра в метода преди. Ще актуализирам състоянието на тази публикация, след като я поправя - person Nicolas Joseph; 12.10.2015