【问题标题】:ReactiveMongo ConnectionNotInitialized In Test After Migrating to Play 2.5迁移到 Play 2.5 后测试中的 ReactiveMongo ConnectionNotInitialized
【发布时间】:2016-05-12 15:35:16
【问题描述】:

将我的 Play (Scala) 应用程序迁移到 2.5.3 后,我使用 ReactiveMongo 对我的代码进行的一些曾经通过的测试现在在设置中失败了。

这是我使用 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)
...
}

在插入行,我得到了这个:

reactivemongo.core.errors.ConnectionNotInitialized: MongoError['连接缺少元数据(如协议版本等)连接池可能正在初始化。']

我尝试了很多方法,例如使用 lazy val 而不是 def 初始化 collection。但没有任何效果。

感谢任何有关如何让我的测试再次通过的见解。

【问题讨论】:

  • 您不应使用reactiveMongoApi.db(已弃用),而应使用reactiveMongoApi.database
  • 好的。由于文档没有指出,并且source code 也没有这样说(因此我的 IDE 没有删除它),因此调用已被弃用并不明显。但是,是的,这确实解决了它。请随时提供此信息作为答案,以便我为您提供一些信息。

标签: scala playframework scalatest reactivemongo scaldi


【解决方案1】:

感谢@cchantep,通过替换上面的代码,测试按预期运行:

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

使用此代码

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

换句话说,reactiveMongoApi.database(以及由于Future而进行的适当更改)是可行的方法。

【讨论】:

  • 我也遇到了这个问题,在 play 2.6 上迁移并修复后。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多