我以为我已经暂时修好了,但结果我还是有问题。
我正在尝试为我的模型层创建一些specs2测试,我想插入一些虚拟对象,然后运行一些查询以确保数据按预期输出。下面是我的简单测试:
类modelspec扩展规范{
override def is=args(sequential=true)^super是。
对象fakeapp扩展了fakeapplication()
正在运行(fakeapp){
println(“设置数据库”)
val newuser=用户(
email=“[email protected]”,
username=“weezybizzle”,
password=“坚果酱”)
user.save(新用户)
}
正在运行(fakeapp){
“用户模型”应该{
在{
println(“寻找某人”)
user.findonebyusername(“weezybizzle”)必须是
}
在{
println(“找不到人”)
user.findonebyusername(“nobody”)必须为benone
}
}
}
}
下面是我从单元测试中得到的堆栈跟踪:
[信息]正在将1个scala源代码编译到/www/mojulo3/target/scala-2.9.1/test classes…
设置数据库
找到某人
找不到任何人
[信息]型号规格
[信息]
[信息]用户模型应该
[错误]!由用户名创建和检索
[错误] ILLealAltAtExeExchange:此Mongo已被关闭(dtcpCelpist.java:123)
[错误] COM.MangGDB .dtcpCOngult.yCuffCalm(DTCP连接器:Java:123)
[错误] COM.MangGDB .dtcpCOntult.Calk(dtcpCelpist.java:207)
[错误] COM.MangGDB .DabpILayer-$MyCuffy.ySyDebug(DabpILael.java:313)
[错误] COM.MangGDB .DabpILayer-$MyCuffy.ySyDebug(DabpILael.java:298)
[错误] COM.MangGDB .dCycult.FordOne(DbCyto.java:682)
[错误] COM.MangGDB .dCycult.FordOne(DbCyto.java:661)
[错误]com.mongodb.casbah.mongocollectionbase$class.findone(mongocollection.scala:225)
[错误]com.mongodb.casbah.mongocollection.findone(mongocollection.scala:897)
[错误]com.novus.salat.dao.salatdao.findone(salatdao.scala:311)
[错误]models.user$.findonebyusername(user.scala:24)
[错误]test.modelspec$$anonfun$3$$anonfun$apply$1$$anonfun$apply$2$$anonfun$apply$3.apply(modelspec.scala:29)
[错误]test.modelspec$$anonfun$3$$anonfun$apply$1$$anonfun$apply$2$$anonfun$apply$3.apply(modelspec.scala:29)
[错误]test.modelspec$$anonfun$3$$anonfun$apply$1$$anonfun$apply$2.apply(modelspec.scala:29)
[错误]test.modelspec$$anonfun$3$$anonfun$apply$1$$anonfun$apply$2.apply(modelspec.scala:27)
[错误]!找不到不存在的用户
【错误】:这个Mongo已经关闭(Java:123)
[错误] COM.MangGDB .dtcpCOngult.yCuffCalm(DTCP连接器:Java:123)
[错误] COM.MangGDB .dtcpCOntult.Calk(dtcpCelpist.java:207)
[错误] COM.MangGDB .DabpILayer-$MyCuffy.ySyDebug(DabpILael.java:313)
[错误] COM.MangGDB .DabpILayer-$MyCuffy.ySyDebug(DabpILael.java:298)
[错误] COM.MangGDB .dCycult.FordOne(DbCyto.java:682)
[错误] COM.MangGDB .dCycult.FordOne(DbCyto.java:661)
[错误]com.mongodb.casbah.mongocollectionbase$class.findone(mongocollection.scala:225)
[错误]com.mongodb.casbah.mongocollection.findone(mongocollection.scala:897)
[错误]com.novus.salat.dao.salatdao.findone(salatdao.scala:311)
[错误]models.user$.findonebyusername(user.scala:24)
[错误]test.modelspec$$anonfun$3$$anonfun$apply$1$$anonfun$apply$6$$anonfun$apply$7.apply(modelspec.scala:35)
[错误]test.modelspec$$anonfun$3$$anonfun$apply$1$$anonfun$apply$6$$anonfun$apply$7.apply(modelspec.scala:35)
[错误]test.modelspec$$anonfun$3$$anonfun$apply$1$$anonfun$apply$6.apply(modelspec.scala:35)
[错误]test.modelspec$$anonfun$3$$anonfun$apply$1$$anonfun$apply$6.apply(modelspec.scala:33)
[信息]
[信息]
[信息]规范模型规范总计
[信息]在20毫秒内完成
[信息]2个示例,0个失败,2个错误
[信息]
[错误]错误:总计2,失败0,错误2,传递0,跳过0
[错误]测试期间出错:
[错误]test.modelspec
[错误]{file:/www/mojulo3/}mojulo3/test:test:测试不成功
[错误]总时间:4s,2012年8月28日10:02:33完成
看起来fakeapp以某种方式与数据库断开连接,而不是重新连接。我查看了播放源代码,似乎应用程序将被停止并重新启动,不管它是否实际是同一个对象。我认为这个问题可能源于salatonStop()
方法或onStart()
,但我并不确定。
我已经挣扎了一段时间,任何帮助,即使只是关于如何解释这个问题,都会非常感谢。
最佳答案
这是因为它关闭了插件onstop方法中的mongodb连接。我已提交拉取请求,以便在测试期间不会发生这种情况:
https://github.com/leon/play-salat/pull/27