1

我正在尝试编写一个 Specs2 测试用例来测试这些片段。我的片段看起来像这样:

class RegisterTest extends Specification {
  val testurl = "http:/html/register?username=liftvalues"
  val testSession = MockWeb.testS(testurl) { S.session }
  def inSession[T](a: => T): T = S.initIfUninitted(testSession) { a }
  def is = s2"""   example1 $e1   """
  val html = <form><input name="username" value="liftvalues"></input></form>
  def e1 = {
    inSession{
      register(html)
    }
  }  
  def register(in:NodeSeq):Result = {
      val username = S.param("username") //Here we are getting "Empty Value" for the S object. 
      username === "liftvalues"  and  UserSchemaTest.registerData("data")
  }
}

此测试失败,因为S.paramis Empty。我应该怎么做才能提供带有模拟请求的代码段?

到目前为止,我已经查看了具有登录用户模拟 HTTP 请求的单元测试片段,但我不明白如何实现我的目标。

4

1 回答 1

1

您的代码甚至不应该编译,因为除其他外testSession会返回 aBox[LiftSession]并且S.initIfUninitted需要 unboxed LiftSession。此外,这甚至不需要,因为MockWeb.testS将为您初始化会话,请参见此处

我对 Specs2 不是很熟悉,但我相信这样的事情应该可以满足您的需求,或者至少可以让您接近:

class RegisterTest extends Specification {

  val testurl = "http://html/register?username=liftvalues"

  val html = <form><input name="username" value="liftvalues"></input></form>
  def e1 = register(html)  

  def register(in:NodeSeq):Boolean = {
      val username = S.param("username") //Here we are getting "Empty Value" for the S object. 
      username === "liftvalues" and  UserSchemaTest.registerData("data")
  }

  MockWeb.testS(testurl) {
    s2"""   example1 $e1   """
  }

}

MockWeb.testS块中调用的所有内容都应该可以访问您的会话和请求 - 这样您就可以正常调用您的方法。

此外,您的测试看起来也有问题, as2"""可能会引发错误。但是,我不完全确定你想要它做什么,所以我无法提出替代方案。

于 2013-09-30T15:23:07.683 回答