【问题标题】:evolutions against test mysql database with scala play specs2使用 scala play specs2 针对测试 mysql 数据库的演变
【发布时间】:2014-12-24 20:54:42
【问题描述】:

我使用 specs2 与 Scala Play (2.3) 进行集成测试,并且我使用 mysql 数据库进行测试,而不是 H2 数据库。我的测试用例使用 WithApplication 和 FakeApplication 以及 db.default.url 的配置覆盖来指定测试(mysql)数据库。

问题是没有运行任何进化。因为没有创建表,所以测试用例全部爆炸。

如果我正常运行应用程序,而不是在测试中,然后应用 Evolutions,然后转储这个数据库并加载到测试数据库中,所有测试都可以通过(我在测试运行之间清理所有表以确保每个测试的数据库都是干净的)。

为什么进化不自动运行?我该怎么做才能让他们跑起来?注意:我不想使用 H2 和 InMemoryDatabase。我想使用 mysql 进行测试,就像我在生产中一样。我在网上找到了各种用于手动定位和运行进化的解决方案,但是这些解决方案都没有维护“play_evolutions”表,我也没有设法让它们在 Play 2.3 中正常工作。

【问题讨论】:

  • 嗨,你能提供一个如何使用 mysql 数据库运行假应用程序的代码示例吗?

标签: database scala playframework specs2


【解决方案1】:

默认情况下,Play Evolutions 只会手动运行。这显然是测试时的一个问题,因为无法提示您运行它们。在您的FakeApplication 中,您可能需要在additionalConfiguration 下设置以下内容:

"evolutionplugin" -> "enabled",
"applyEvolutions.default" -> true, 
"applyDownEvolutions" -> true

所以你的FakeApplication 可能看起来像这样:

val app = FakeApplication(additionalConfiguration = Map(
    "db.default.driver" -> "com.mysql.jdbc.Driver",
    "db.default.url" -> "jdbc:mysql://localhost/test"
    "db.default.user" -> "...",
    "db.default.password" -> "...",
    "evolutionplugin" -> "enabled",
    "applyEvolutions" -> "false"
))

或者,您也可以删除自定义 FakeApplication 并回退到 application.conf 中的内容。

请注意,这只会在它说play_evolutions 不存在或不一致时运行演变。因此,如果您想在每次测试后清理它,您需要自己删除这些表。

【讨论】:

    【解决方案2】:

    将以下设置添加到您的配置文件中

    applyEvolutions.default=true
    

    其中“默认”是您的数据库的名称。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-14
      • 2014-04-12
      • 1970-01-01
      • 2020-01-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多