我有一個specs2測試,它使用FakeApplication和嵌入式MongoDB數據庫。播放2.0 FakeApplication設置與測試配置
def inMemoryMongoDatabase(name: String = "default"): Map[String, String] = {
val dbname: String = "play-test-" + scala.util.Random.nextInt
Map(
("mongodb." + name + ".db" -> dbname),
("mongodb." + name + ".port" -> EmbeddedMongoTestPort.toString))
}
override def around[T <% Result](t: => T) = {
running(FakeApplication(additionalConfiguration = inMemoryMongoDatabase(), additionalPlugins = Seq("se.radley.plugin.salat.SalatPlugin"))) {
t // execute t inside a http session
}
}
的FakeApplication使用在conf目錄和額外的配置可用於爲每個測試創建的測試數據庫的默認application.conf配置。
這是工作找到,直到我們設置了一個mongodb複製集。現在application.conf包含此replicat配置設置
mongodb.default.replicaset {
host1.host = "localhost"
host1.port = 27017
host2.host = "localhost"
host2.port = 27018
host3.host = "localhost"
host3.port = 27019
}
由於FakeApplication使用默認的配置測試失敗,因爲replicaset的主機不能被發現。我想爲我的測試有不同的配置,基本上刪除mongodb.default.replicaset條目。如果mongodb.default.replicaset是一個簡單的Map [String,String],可以很簡單,因爲我可以將它添加到additonalConfiguration,但是當我嘗試這樣做時,它會失敗,因爲期望的值類型不是String而是Object。我也嘗試通過path參數向FakeApplication提供一個單獨的test.conf文件。
override def around[T <% Result](t: => T) = {
running(FakeApplication(path = new java.io.File("conf/test.conf"), additionalConfiguration = inMemoryMongoDatabase(), additionalPlugins = Seq("se.radley.plugin.salat.SalatPlugin"))) {
t // execute t inside a http session
}
}
因爲它沒有加載任何配置,所以沒有工作。
我將不勝感激任何幫助。謝謝。
克里斯