Новый проект-игра Ла Скала (v2.5.6) начинается с примерами тестов, как это:Scala Play: Как внедрить тестовую базу данных в контроллер для тестирования
"HomeController" should {
"render the index page" in {
val home = route(app, FakeRequest(GET, "/")).get
status(home) mustBe OK
}
}
и контроллер примеров, как этот, инжекции Database
с Guice:
class DataManagementController @Inject()(db: Database) extends Controller {...}
Я хотел бы проверить этот новый контроллер, как указано выше, но нагнетание теста в памяти базы данных вместо «по умолчанию». После нескольких часов я не могу этого добиться. Я нашел ключи в
(и внешний posts использованием FakeApplication
, хотя они очень сложны, и я бы предпочел, чтобы следовать официальной, текущей версии, с Docs.)
От этого я понял, что есть аргумент implicit app
, используемый в route(app, ...)
, поэтому я попытался его переопределить:
Покушение 1: (компилирует, но по-прежнему использует базы данных "по умолчанию")
class MySpec extends PlaySpec with OneAppPerSuite {
implicit override lazy val app = new GuiceApplicationBuilder()
.configure(inMemoryDatabase("test").build()
"DataManagementController" should { ... }
ПОПЫТКА 2: (не компилируется: "Не удается разрешить символ" TestDb")
class MySpec extends PlaySpec with OneAppPerSuite {
val TestDb = Databases.inMemory(name="test")
implicit override lazy val app = new GuiceApplicationBuilder()
.overrides(bind[Database].to[TestDb]).build()
"DataManagementController" should { ... }
Есть ли я на правильном пути?