Создание функциональных тестов Scala Playframework 2.6 Macwire - PullRequest
0 голосов
/ 08 мая 2018

Я написал некоторые черты, чтобы использовать их в качестве основы для своих функциональных тестов

Этот файл предназначен для создания БД в памяти (H2 + Evolutions)

BlogApiDBTest.scala

package functional.common

import play.api.db.Databases
import play.api.db.evolutions.Evolutions

trait BlogApiDBTest {

  implicit val testDatabase = Databases.inMemory(
    name = "blog_db",
    urlOptions = Map(
      "MODE" -> "MYSQL"
    ),
    config = Map(
      "logStatements" -> true
    )
  )

  org.h2.engine.Mode.getInstance("MYSQL").convertInsertNullToZero = false
  Evolutions.applyEvolutions(testDatabase)
}

Здесь я переопределяю некоторые введенные компоненты для тестирования

BlogApiComponentsTest.scala

package functional.common

import common.BlogApiComponents
import org.scalatestplus.play.components.WithApplicationComponents
import play.api.{BuiltInComponents, Configuration}

trait BlogApiComponentsTest extends WithApplicationComponents with BlogApiDBTest {

  override def components: BuiltInComponents = new BlogApiComponents(context) {
    override lazy val configuration: Configuration = context.initialConfiguration
    override lazy val blogDatabase = testDatabase
  }

}

Это базовый класс для моих функциональных тестов

BlogApiOneServerPerTestWithComponents.scala

package functional.common

import org.scalatestplus.play.PlaySpec
import org.scalatestplus.play.components.{OneServerPerTestWithComponents}

trait BlogApiOneServerPerTestWithComponents extends PlaySpec with OneServerPerTestWithComponents with BlogApiComponentsTest {

}

Наконец тест, который я пытаюсь выполнить

PostControllerSpec.scala

package functional.controllers

import functional.common.BlogApiOneServerPerTestWithComponents
import org.scalatest.concurrent.{IntegrationPatience, ScalaFutures}
import play.api.mvc.{Results}
import play.api.test.{FakeRequest, Helpers}


import play.api.test.Helpers.{GET, route}

class PostControllerSpec extends BlogApiOneServerPerTestWithComponents
  with Results
  with ScalaFutures
  with IntegrationPatience {

  "Server query should" should {
    "provide an Application" in {
      val Some(result) = route(app, FakeRequest(GET, "/posts"))
      Helpers.contentAsString(result) must be("success!")
    }
  }

}

Тогда я получу

blog-api / test / functions / controllers / PostControllerSpec.scala: 18: 31: Невозможно записать экземпляр play.api.mvc.AnyContentAsEmpty.type в ответ HTTP. Попробуйте определить Writeable [play.api.mvc.AnyContentAsEmpty.type]

Вот код

1 Ответ

0 голосов
/ 08 мая 2018

Добавление следующего импорта должно заставить его работать:

import play.api.test.Helpers._

Глядя на подпись route

def route[T](app: Application, req: Request[T])(implicit w: Writeable[T]): Option[Future[Result]]

мы видим, что он ожидает implicit w: Writeable[T].Приведенный выше импорт предоставит его через Writables

...