gpt4 book ai didi

斯卡拉/电梯 : How do I write unit tests that test a snippet's response to different parameters

转载 作者:行者123 更新时间:2023-12-03 23:49:37 24 4
gpt4 key购买 nike

我正在尝试编写一个 Specs2 测试,该测试将测试片段的输出以响应通常从模板传入的不同参数,但我无法弄清楚如何去做。

例如,使用此 div 中的代码段标注:

<div class="lift:Snippet.method?param1=foo"></div>

我将参数 param1 传递给代码段。我的片段看起来像这样:
class Snippet {
def method(in:NodeSeq):NodeSeq = {
val param1 = S.attr("param1") openOr ""
param1 match {
case "foo" => //do something
case "bar" => //do something else
case _ => //do yet another thing
}
}
}

所以在我的测试中,我想测试片段如何响应不同的 param1 值
class SnippetTest extends Specification {
"Snippet" should {
"do something" in {
val html = <ul>
<li class="first">
<li class="second">
<li class="third">
</ul>

//I need to set param1 here somehow
val out = Snippet.method(html)
//then check that it did what it was supposed to
out.something must be "xyz"
}
}
}

如何设置 param1?

我是一个重要的 scala 并且提升 newb(来自 python+django),所以如果我在错误的树上吠叫,请引导我到正确的树。我认为可能是这种情况,我整天都在谷歌上搜索,并没有发现任何与此类似的问题。

谢谢,

布莱克

最佳答案

好的,我已经弄清楚了。这个问题没有引起太大的兴趣,但如果有人在谷歌上搜索同样的问题/问题,你可以这样做:

Lift 的“S”对象需要添加我们的任意属性,以便在被询问时为我们的代码片段提供我们想要测试的属性。不幸的是,有两个问题。首先,“S”对象仅在收到http请求时才被初始化。其次,S.attr 是不可变的。

Lift 有一个名为 mockweb 的包,它允许您发出模拟 http 请求。这个包的文档通常讨论测试 session 和用户登录等等,但它也提供了初始化“S”作为规范测试一部分的机制。

第一个问题,初始化 S,通过将我们的测试类定义为 WebSpec 的扩展而不是 Specification(WebSpec 是 mockweb 包的一部分并扩展 Specification)来解决,并在规范定义期间调用“withSFor”,这将初始化“S "

第二个问题,处理 S.attr 是不可变的,通过“S”方法“withAttrs”解决。 “withAttrs”执行您提供的代码块,其中包含常规属性和您在 map 中提供的属性。您的任意属性只能从 S.attr 临时获得

这是我原来的问题的测试,它已被修改以解决两个问题:

import net.liftweb.mockweb._

class SnippetTest extends WebSpec {
"Snippet" should {
"do something" withSFor("/") in {
val html = <ul>
<li class="first">
<li class="second">
<li class="third">
</ul>

//here I set param1
var m = new HashMap[String, String]
m += "param1" -> "foo"

val s = new Snippet()

//then tell S to execute this block of code
//with my arbitrary attributes.
//'out' will be the NodeSeq returned by s.method
val out = S.withAttrs(S.mapToAttrs(m)){
s.method(html)
}

//then check that it did what it was supposed to
out.something must be "xyz"
}
}
}

编辑:清晰度

关于斯卡拉/电梯 : How do I write unit tests that test a snippet's response to different parameters,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9089819/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com