在grails中taglib的单元测试期间,属性为空

时间:2012-03-20 19:47:17

标签: unit-testing grails taglib

我正在尝试在taglib(grails 2.0.1)中测试我的代码:

class ATagLib {
    static namespace = "s"
    def person = {attrs, body -> out << attrs.person;}
}

@TestFor(ATagLib)
class ATagLibTests {
   @Test
   void test() {
       String p = 'Joe'
       // None of these work for me.
       assert applyTemplate('<s:person person="${p}"/>') == 'Joe'
       assert applyTemplate('<s:person/>', [person:p]) == 'Joe'
   }
}

测试总是失败,因为attrs.person为null。如何正确设置属性?

2 个答案:

答案 0 :(得分:2)

这将有效:

String p = 'Joe'
assert applyTemplate('<s:person person="${person}"/>', [person:p]) == 'Joe'
assertOutputEquals('Joe is cool !', '<s:person person="${person}"/>', [person:p], { it.toString() + " is cool !" } )

它调用applyTemplate的第一个签名,即:

String applyTemplate(String contents, Map model = [:])

enter image description here

答案 1 :(得分:0)

问题是你使用单引号作为模板文字吗?只有GStrings可以使用$表示法来插入变量。单引号使其成为常规Java字符串,不会替换您的值。

试试这个:

assert applyTemplate("<s:person person=\"${p}\"/>") == "Joe"