gpt4 book ai didi

斯卡拉玩 : How to inject test Database into Controller for testing

转载 作者:行者123 更新时间:2023-12-01 09:58:14 25 4
gpt4 key购买 nike

一个新的 scala-play 项目 (v2.5.6) 从像这样的测试示例开始:

"HomeController" should {
"render the index page" in {
val home = route(app, FakeRequest(GET, "/")).get
status(home) mustBe OK
}
}

和这样的 Controller 示例,使用 Guice 注入(inject) Database:

class DataManagementController @Inject()(db: Database) extends Controller {...}

我想像上面那样测试这个新 Controller ,但注入(inject)一个测试内存数据库而不是“默认”。经过几个小时的尝试,我无法做到这一点。我在中找到了线索

(和外部 posts 使用 FakeApplication,尽管它们非常复杂,我更愿意遵循官方的当前版本的文档。)

据我所知,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 { ... }

我走在正确的轨道上吗?

最佳答案

应该不是问题,但您可以尝试:

implicit override lazy val app = new GuiceApplicationBuilder()
.overrides(bind(classOf[Database]).to(classOf[TestDb]).build()

代替

implicit override lazy val app = new GuiceApplicationBuilder()
.overrides(bind[Database].to[TestDb]).build()

和/或

"" should {
"" in new App(appBuilder) {
}
}

其中 appappBuilderGuiceApplicationBuilder

关于斯卡拉玩 : How to inject test Database into Controller for testing,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39489368/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com