gpt4 book ai didi

scala - 玩光滑 : How to inject DbConfigProvider in tests

转载 作者:行者123 更新时间:2023-12-04 21:07:32 25 4
gpt4 key购买 nike

我正在使用 Play 2.5.10、Play-slick 2.0.2,并且我的激活器生成的项目带有 scalatest 和这样的代码:

class TestSpec extends PlaySpec with OneAppPerSuite {...}

我设法测试了路线/ Action ;现在我会 测试 DAO 方法 在较低的水平上。我在网上搜索了一个解决方案,但找不到任何仍然是最新的。 DAO 签名是这样的:
class TestDAO @Inject()(protected val dbConfigProvider: DatabaseConfigProvider) extends HasDatabaseConfigProvider[JdbcProfile]

所以我需要将它传递给 dbConfigProvider事物。
出于某种原因,我不能像在 Controller 中那样将提供程序注入(inject)到测试中(没有错误,测试不会运行):
class TestSpec @Inject()(dbConfigProvider: DatabaseConfigProvider) extends PlaySpec with OneAppPerSuite {...}

Play-Slick docs说我们可以选择使用全局查找
val dbConfig = DatabaseConfigProvider.get[JdbcProfile](Play.current)

但它不会直接工作,因为

There is no started application



并链接到执行此操作的示例项目:
class TestDAOSpec extends Specification {
"TestDAO" should {
"work as expected" in new WithApplicationLoader { // implicit 'app'
val app2dao = Application.instanceCache[TestDAO].apply(app)

但我永远找不到 WithApplicationLoader .相反,似乎有一个 WithApplication :
class TestDAOSpec extends Specification {
"TestDAO" should {
"work as expected" in new WithApplication() { // implicit 'app'
val app2dao = Application.instanceCache[TestDAO].apply(app)

但后来我得到

Type mismatch: expected a play.api.Application, got: play.Application.



在这一点上,我失去了希望。

如何测试 DAO?

注:我不需要切换数据库进行测试(我通过配置处理),我只想访问测试中的默认数据库。

最佳答案

您可以使用:

lazy val appBuilder: GuiceApplicationBuilder = new GuiceApplicationBuilder().in(Mode.Test) 
lazy val injector: Injector = appBuilder.injector()
lazy val dbConfProvider: DatabaseConfigProvider = injector.instanceOf[DatabaseConfigProvider]

关于scala - 玩光滑 : How to inject DbConfigProvider in tests,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42021022/

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