2016-05-12 10 views
1

Nach der Migration meiner Play (Scala) -App auf 2.5.3 scheitern einige Tests meines Codes mit ReactiveMongo, die nun bestanden wurden, im Setup.ReactiveMongo ConnectionNotInitialized im Test nach der Migration auf Play 2.5

Hier ist mein Code ScalaTest:

def fixture(testMethod: (...) => Any) { 
     implicit val injector = new ScaldiApplicationBuilder() 
     .prependModule(new ReactiveMongoModule) 
     .prependModule(new TestModule) 
     .buildInj()   
     def reactiveMongoApi = inject[ReactiveMongoApi] 
     def collection: BSONCollection = reactiveMongoApi.db.collection[BSONCollection](testCollection) 
     lazy val id = BSONObjectID.generate 
     //Error occurs at next line 
     Await.result(collection.insert(Person(id = id, slug = "test-slug", firstName = "Mickey", lastName = "Mouse")), 10.seconds) 
... 
} 

An der Einsatzleitung, bekomme ich diese:

reactivemongo.core.errors.ConnectionNotInitialized: MongoError [ 'Verbindungs ​​Metadaten fehlt (wie Protokoll Version, usw.) Der Verbindungspool wird wahrscheinlich initialisiert. ']

Ich habe eine Menge Dinge wie Initialisierung collection mit einer lazy val Inst versucht ead von def. Aber nichts hat funktioniert.

Jeder Einblick in, wie man meine Tests wieder erhält, wird geschätzt.

+1

Sie sollten nicht 'reactiveMongoApi.db' (veraltet), sondern' reactiveMongoApi.database' verwenden. – cchantep

+0

OK. Es war nicht offensichtlich, dass der Aufruf veraltet ist, da die Dokumentation dies nicht anzeigt und der [Quellcode] (https://github.com/ReactiveMongo/Play-ReactiveMongo/blob/01499f90cb0c0ddf21aa602908dc276d2f6a415b/src/main/scala/play/ modules/reactivemono/ReactiveMongoApi.scala # L47) sagt das auch nicht (und deshalb hat meine IDE es nicht durchgestrichen). Aber ja, das hat es behoben. Fühlen Sie sich frei, diese Informationen als Antwort zur Verfügung zu stellen, damit ich Sie mit einigen Punkten einhaken kann. – Vidya

Antwort

2

Mit Dank an @cchantep läuft der Test wie oben durch Ersetzen diesen Code erwartet:

def collection: BSONCollection = reactiveMongoApi.db.collection[BSONCollection](testCollection) 

mit diesem Code

def collection: BSONCollection = Await.result(reactiveMongoApi.database.map(_.collection[BSONCollection](testCollection)), 10.seconds) 

Mit anderen Worten, reactiveMongoApi.database (zusammen mit den entsprechenden Änderungen, weil von der Future) ist der Weg zu gehen.

+0

Ich hatte dieses Problem auch, nach der Migration auf Play 2.6 und damit beheben. –

Verwandte Themen