使用specs2播放!使用Reactivemongo的假应用程序会导致超时

时间:2013-09-11 11:10:07

标签: mongodb scala playframework-2.1 specs2 reactivemongo

我们目前正在研究一个问题,我们在scala中使用specs2 togeather with mongodb / reactivemongo + Play!。

当我们运行写入mongodb的测试时,第一个操作运行正常,所有后续的测试/写入由于mongodb的超时而失败。

我们在这里找到了反应性mongo网站上已经记录的错误: https://github.com/ReactiveMongo/Play-ReactiveMongo/issues/32

是否有人知道此问题的解决方法?

我们已经尝试过:

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

非常感谢任何帮助!

2 个答案:

答案 0 :(得分:1)

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

val db = ReactiveMongoPlugin.db

def db = ReactiveMongoPlugin.db

将val表示为 def

因调用

而出现问题
play.modules.reactivemongo.ReactiveMongoPlugin#db

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

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

答案 1 :(得分:0)

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

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

我知道这篇文章很老,但希望它可以帮助其他人。