【发布时间】:2020-05-23 20:45:28
【问题描述】:
我想在播放应用程序(使用 slick)启动之前从 docker-compose 文件(postgres 和 kafka 实例)启动测试容器。我想要这个,所以我可以写一个端到端的测试。我似乎无法弄清楚 Play 是如何实现的。
import java.io.File
import com.dimafeng.testcontainers.DockerComposeContainer.ComposeFile
import com.dimafeng.testcontainers.{DockerComposeContainer, ForAllTestContainer}
import com.typesafe.config.ConfigFactory
import org.scalatest.{BeforeAndAfterAll, FunSpec}
import org.scalatestplus.play.guice.GuiceFakeApplicationFactory
import play.api.inject.guice.GuiceApplicationBuilder
import play.api.{Application, Configuration, Environment, Mode}
trait TestFunSpec extends FunSpec with BeforeAndAfterAll with GuiceFakeApplicationFactory {
override def fakeApplication(): Application = new GuiceApplicationBuilder()
.in(Environment(new File("."), getClass.getClassLoader, Mode.Test))
.loadConfig(_ => Configuration(ConfigFactory.load("test.conf")))
.build
}
class TestIntegrationSpec extends TestFunSpec with ForAllTestContainer {
override val container = DockerComposeContainer(ComposeFile(Left(new File("docker-compose.yml"))))
it("should test something") {
assert(true)
}
}
Scala 版本 2.12.10 测试容器版本 0.35.0 玩 slick 版本 5.0.0
当我在没有“TestFunSpec”的情况下执行测试时,docker-compose 会正确启动我的服务。当我在范围内添加播放应用程序“TestFunSpec”时,该应用程序会尝试启动,这样做时,它会尝试与尚不存在的 postgres 连接(因为之后会启动测试容器)。
提前谢谢。
更新:详细答案请参见答案部分。
【问题讨论】:
-
你想在所有测试用例之前还是在每个测试用例之前启动它?
-
播放应用程序启动前。所以,在所有测试用例初始化之前。
标签: scala playframework scalatest testcontainers