简单的scalatra-test specs2示例抛出异常

时间:2012-05-10 06:46:30

标签: scala scalatra specs2

scalatra docs运行scalatra specs2示例时出现此异常:

ThrowableException: org.eclipse.jetty.http.HttpGenerator.flushBuffer()I (FutureTask.java:138)

这是测试代码(从第5行开始,跳过导入):

class MyAppTest extends MutableScalatraSpec {
  addServlet(classOf[MyApp], "/*") 

  "GET / on AdminApp" should {
    "return status 200" in {
      get("/") { 
        status must_== 200
      }
    }
  }
}

以下是应用定义:

class MyApp extends ScalatraServlet {

  get("/") {
    "aloha"
  }
}

我正在使用scalatra-specs2 2.0.4和scala 2.9.1。我使用xsbt-web-plugin 0.2.10和sbt 0.11.2运行嵌入式jetty服务器。测试是使用sbt test执行的。

以下是完整的跟踪:

[info] GET / on AdminApp should
[error] ! Fragment evaluation error
[error]     ThrowableException: org.eclipse.jetty.http.HttpGenerator.flushBuffer()I (FutureTask.java:138)
[error] org.eclipse.jetty.testing.HttpTester.generate(HttpTester.java:225)
[error] org.scalatra.test.ScalatraTests$class.submit(ScalatraTests.scala:46)
[error] com.example.MyAppTest.submit(MyAppTest.scala:5)
[error] org.scalatra.test.ScalatraTests$class.submit(ScalatraTests.scala:71)
[error] com.example.MyAppTest.submit(MyAppTest.scala:5)
[error] org.scalatra.test.ScalatraTests$class.get(ScalatraTests.scala:127)
[error] com.example.MyAppTest.get(MyAppTest.scala:5)
[error] com.example.MyAppTest$$anonfun$1$$anonfun$apply$3.apply(MyAppTest.scala:10)
[error] com.example.MyAppTest$$anonfun$1$$anonfun$apply$3.apply(MyAppTest.scala:10)
[error] org.eclipse.jetty.http.HttpGenerator.flushBuffer()I
[error] org.eclipse.jetty.testing.HttpTester.generate(HttpTester.java:225)
[error] org.scalatra.test.ScalatraTests$class.submit(ScalatraTests.scala:46)
[error] com.example.MyAppTest.submit(MyAppTest.scala:5)
[error] org.scalatra.test.ScalatraTests$class.submit(ScalatraTests.scala:71)
[error] com.example.MyAppTest.submit(MyAppTest.scala:5)
[error] org.scalatra.test.ScalatraTests$class.get(ScalatraTests.scala:127)
[error] com.example.MyAppTest.get(MyAppTest.scala:5)
[error] com.example.MyAppTest$$anonfun$1$$anonfun$apply$3.apply(MyAppTest.scala:10)
[error] com.example.MyAppTest$$anonfun$1$$anonfun$apply$3.apply(MyAppTest.scala:10)

这是迄今为止唯一出现的搜索结果: Fragment Evaluation Error

有人能指出我正确的方向吗?

谢谢, -f

2 个答案:

答案 0 :(得分:1)

仍然不确定根本原因,但是在将jetty-webapp从8.0.3.v20111011回滚到7.6.0.v20120127之后测试成功执行。

答案 1 :(得分:0)

您的依赖项可能存在冲突,更具体地说是Jetty库版本。由于HttpGenerator上的“flush”方法在Jetty 6和Jetty 7之间发生了变化,你可能会得到一个“NoSuchMethodFoundError”来解释奇怪的“org.eclipse.jetty.http.HttpGenerator.flushBuffer()I”签名在异常消息中。

这也解释了为什么你会得到一个“片段评估错误”而不是正常的失败,如你提到的链接中所述。

如果您使用最新的specs2-1.10-SNAPSHOT,那么当发生这种情况时,您会收到更好的消息“片段评估错误”,显示“NoSuchMethodError”。这将有助于您更快地诊断问题。