Mam test specs2, który wykorzystuje FakeApplication i osadzoną bazę danych mongodb.Play 2.0 Konfiguracja FakeApplication z konfiguracją testową
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 korzysta z domyślnej konfiguracji application.conf w katalogu conf i dodatkowej konfiguracji dla baz danych testowych, które są tworzone dla każdego testu.
To działało, dopóki nie skonfigurujemy zestawu replik mongodów. Teraz application.conf zawiera konfigurację dla tego replicat ustawić
mongodb.default.replicaset {
host1.host = "localhost"
host1.port = 27017
host2.host = "localhost"
host2.port = 27018
host3.host = "localhost"
host3.port = 27019
}
Jak FakeApplication wykorzystuje domyślną konfigurację testów zakończy się niepowodzeniem, ponieważ nie można znaleźć gospodarzami replicaset. Chcę mieć inną konfigurację dla moich testów, zasadniczo usuń wpis mongodb.default.replicaset. Jeśli mongodb.default.replicaset był prosty Map [String, String], który byłby łatwy, ponieważ mógłbym dodać go do additonalConfiguration, ale gdy próbuję to zrobić, to się nie uda, ponieważ oczekiwany typ wartości nie jest ciągiem, ale obiektem. Próbowałem również dostarczyć oddzielny plik test.conf do FakeApplication za pośrednictwem parametru ścieżki.
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
}
}
To nie działało, ponieważ nie załadowało żadnej konfiguracji.
Byłbym wdzięczny za każdą pomoc. Dzięki.
Chris