我有一个使用 FakeApplication 和嵌入式 mongodb 数据库的 specs2 测试。
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 包含此副本集的配置
mongodb.default.replicaset {
host1.host = "localhost"
host1.port = 27017
host2.host = "localhost"
host2.port = 27018
host3.host = "localhost"
host3.port = 27019
}
由于 FakeApplication 使用默认配置,因此测试失败,因为找不到副本集的主机。我想为我的测试设置不同的配置,基本上删除 mongodb.default.replicaset 条目。如果 mongodb.default.replicaset 是一个简单的 Map[String, String] 这将很容易,因为我可以将它添加到 additonalConfiguration 但是当我尝试这样做时它会失败,因为预期的值类型不是字符串而是对象。我还尝试通过路径参数向 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
}
}
这也不起作用,因为它没有加载任何配置。
我将不胜感激任何帮助。谢谢。
克里斯