创建功能测试Scala Playframework 2.6 Macwire

问题描述 投票:0回答:1

我写了一些特性,用它作为我的功能测试的基础

此文件用于在内存中创建数据库(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 / functional / controllers / PostControllerSpec.scala:18:31:无法将play.api.mvc.AnyContentAsEmpty.type的实例写入HTTP响应。尝试定义可写[play.api.mvc.AnyContentAsEmpty.type]

这是code

scala playframework scalatest
1个回答
2
投票

添加以下导入应该使它工作:

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提供

© www.soinside.com 2019 - 2024. All rights reserved.