2014-12-24 27 views
2

我正在使用specs2与Scala Play(2.3)的集成测试,我使用MySQL数据库进行测试,而不是一个H2数据库。我的测试用例使用WithApplication和FakeApplication配置覆盖db.default.url来指定测试(mysql)数据库。演变对测试MySQL数据库与Scala玩specs2

问题是没有进行任何演变。由于没有创建表格,因此测试用例全部被弹出。

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

为什么演化不会自动运行?我能做些什么来让他们跑步?注意:我不想使用H2和InMemoryDatabase。我想用mysql来进行测试,就像我在生产中一样。我在'网络上找到了各种解决方案来进行手动定位和运行演变,但是这些解决方案都没有保留“play_evolutions”表格,我还没有设法让它们在Play 2.3中正常工作。

+0

嗨,你会提供一个代码示例如何运行与MySQL数据库的假应用程序? – Andrey

回答

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不存在或不一致时,才会进行演变。所以如果你想在每次测试后清理它,你需要自己去掉表格。

0

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

applyEvolutions.default=true 

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