someMethod中不存在符号值

时间:2014-01-10 14:52:36

标签: scala selenium playframework scala-2.10 scalatest

这是我测试的源代码:

import org.openqa.selenium.firefox.FirefoxDriver
import org.scalatest.FlatSpec
import org.scalatest.Matchers

import play.api.test.FakeApplication
import play.api.test.WithApplication

class FunctionalSpec extends FlatSpec with Matchers {
  def withDriver(f: FirefoxDriver => Unit) = {
    val driver = new FirefoxDriver
    try {
      new WithApplication(
        new FakeApplication(additionalConfiguration = Map("application.secret" -> "secret"))) {
        f(driver)
      }
    } finally {
      driver.quit
    }
  }
}

它不会在Eclipse中显示任何编译错误。但是当我执行test命令时,它会显示a very long error message。这是错误的第一行:

  

test.FunctionalSpec中不存在符号值f $ 1. $ anon $ 1 $ delayedInit $ body.apply

我尝试通过修改代码来玩一下,如下所示:

  def withDriver(f: FirefoxDriver => Unit) = {
    val driver = new FirefoxDriver
    try {
      val g = f
      val driver2 = driver
      new WithApplication(
        new FakeApplication(additionalConfiguration = Map("application.secret" -> "secret"))) {
        val h = g
        val driver3 = driver2
        h(driver3)
      }
    } finally {
      driver.quit
    }
  }

执行test命令时没有抛出任何错误。知道发生了什么事吗?为了保持标识符的识别,代码块的深度是否有限制?

编辑: 使用我上面修改过的代码会产生runtime-error。我添加了以下代码:

"The admin" should "be able to login and logout correctly" in withDriver { implicit driver =>
  // Don't do anything yet.
}

这一行显示在运行时错误消息的一行中:

  

原因:java.lang.NoSuchFieldError:g $ 1

有关解决方法的任何建议吗?

附加说明: 上面的所有代码都编译得很好。 Eclipse或scalac都没有抱怨。只有当我从Play命令shell执行test命令时,才会发生上述所有错误。

1 个答案:

答案 0 :(得分:-1)

这不能直接回答你的问题,但我会做两件事:

  1. 使用Specs2而不是ScalaTest
  2. 按照此处所述重写您的测试:http://www.playframework.com/documentation/2.2.x/ScalaFunctionalTest