Scala 如何使用specs2框架在liftweb中测试代码片段
我正在尝试编写一个Specs2测试用例来测试代码片段。 我的代码片段如下所示:Scala 如何使用specs2框架在liftweb中测试代码片段,scala,lift,specs2,Scala,Lift,Specs2,我正在尝试编写一个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.initIfUninitte
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")
}
}
类寄存器测试扩展了规范{
val testurl=“http:/html/register?username=liftValue”
val testSession=MockWeb.testS(testurl){S.session}
def inSession[T](a:=>T):T=S.initifuninited(testSession){a}
def is=s2“示例1$e1”
val html=
def e1={
插入{
注册(html)
}
}
def寄存器(in:NodeSeq):结果={
val username=S.param(“username”)//这里我们得到的是S对象的“空值”。
username==“liftvalues”和UserSchemaTest.registerData(“数据”)
}
}
由于S.param
为空,此测试失败。我应该如何为代码段提供模拟请求
到目前为止,我已经看过
还有,但是我不知道如何实现我的目标。你的代码本来就不应该编译,因为除了其他事情之外,testSession
会返回一个Box[LiftSession]
,而S.initifuninited
需要一个unboxLiftSession
。而且,这甚至不需要,因为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 """
}
}
类寄存器测试扩展了规范{
val testurl=”http://html/register?username=liftvalues"
val html=
def e1=寄存器(html)
def寄存器(in:NodeSeq):布尔={
val username=S.param(“username”)//这里我们得到的是S对象的“空值”。
username==“liftvalues”和UserSchemaTest.registerData(“数据”)
}
MockWeb.testS(testurl){
s2“示例1$e1”
}
}
从MockWeb.testS
块中调用的所有内容都应该可以访问您的会话和请求,这样您就可以正常地进行方法调用
另外,您的测试看起来也是错误的,s2”“”
可能会抛出一个错误。但是,我不完全确定您希望它做什么,所以我不能建议其他选择。您的代码甚至不应该编译,因为除此之外,testSession
将返回一个框[LiftSession]
和S.initifuninited
需要一个未绑定的提升会话
。此外,由于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 """
}
}
类寄存器测试扩展了规范{
val testurl=”http://html/register?username=liftvalues"
val html=
def e1=寄存器(html)
def寄存器(in:NodeSeq):布尔={
val username=S.param(“username”)//这里我们得到的是S对象的“空值”。
username==“liftvalues”和UserSchemaTest.registerData(“数据”)
}
MockWeb.testS(testurl){
s2“示例1$e1”
}
}
从MockWeb.testS
块中调用的所有内容都应该可以访问您的会话和请求,这样您就可以正常地进行方法调用
此外,您的测试看起来也是错误的,s2”“
可能会抛出错误。但是,我不完全确定你想要它做什么,所以我不能建议一个替代方案