我使用specs2进行Scala Play(2.3)的集成测试,并且我使用mysql数据库进行测试,而不是使用H2数据库。我的测试用例使用WithApplication和FakeApplication以及db.default.url的配置覆盖来指定测试(mysql)数据库。
问题在于没有进行任何改进。测试用例全部爆炸,因为没有创建表格。
如果我正常运行应用程序,而不是在测试和Apply Evolutions,然后转储此数据库并加载到测试数据库,所有测试都通过(我在测试运行之间清理所有表以确保每个测试都有一个干净的数据库)。
为什么没有自动运行?我该怎么做让他们跑?注意:我不想使用H2和InMemoryDatabase。我想使用mysql进行测试,就像我在生产中一样。我已经在网上找到了各种解决方案,用于手动定位和运行演进,但这些解决方案都没有维持" play_evolutions"表格,我没有设法让它们在Play 2.3中正常工作。
答案 0 :(得分:1)
默认播放演变只会手动运行。这显然是测试时的一个问题,因为无法提示您运行它们。在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
不存在或不一致时才会进行演变。因此,如果您想在每次测试后进行清理,那么您需要自己放弃这些表。
答案 1 :(得分:0)
将以下设置添加到配置文件
applyEvolutions.default=true
其中“default”是数据库的名称。