【问题标题】:Using specs2 play! fake application with Reactivemongo causes timeouts使用specs2玩!使用 Reactivemongo 的虚假应用程序导致超时
【发布时间】:2013-09-11 11:10:07
【问题描述】:

我们目前正在解决一个问题,即在 scala 中将 specs2 与 mongodb/reactivemongo + Play! 结合使用。

当我们运行写入 mongodb 的测试时,第一个操作运行良好,所有后续测试/写入都因 mongodb 超时而失败。

我们在反应式 mongo 网站上发现了一个似乎已经记录在案的错误: https://github.com/ReactiveMongo/Play-ReactiveMongo/issues/32

有人知道这个问题的解决方法吗?

我们已经尝试过了:

  • 强制按顺序运行测试
  • 每个测试都在自己的假应用中运行
  • 在同一个虚假应用程序中运行所有测试
  • 将集合定义为 def(如上述问题 32 中所建议的)

非常感谢任何帮助!

【问题讨论】:

标签: mongodb scala playframework-2.1 specs2 reactivemongo


【解决方案1】:

您可以更改(在您的 Controller/Repo/DAO/Service 或您所称的任何名称中):

val db = ReactiveMongoPlugin.db

def db = ReactiveMongoPlugin.db

def

的意义

问题发生是因为调用

play.modules.reactivemongo.ReactiveMongoPlugin#db

返回当前数据库设置,以便将其 val 连接到第一个测试。

FYI 在每次测试之前 Reactive Mongo 插件 建立与 DB 的连接并在每次测试后关闭它。

【讨论】:

    【解决方案2】:

    我在测试期间也有超时,这是我们Global.onStart() 函数的副作用。我们试图确保使用 collection.indexesManager.ensure() 的 Mongo 索引,根据文档,这可能是一个阻塞操作。

    由于我们进行了实例化新应用程序和写入/读取数据库的测试,因此该索引会导致大量超时。因此,一种解决方案可能是在您启动应用程序时删除与索引的任何交互。

    我知道这篇文章已经很老了,但希望它可以对其他人有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-22
      • 2022-01-15
      • 2010-12-05
      • 1970-01-01
      相关资源
      最近更新 更多