2012-03-20 2 views
0

Я пытаюсь проверить свой код в TagLib (Grails 2.0.1):Атрибуты являются пустыми при единичном испытании TagLib в Граалей

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 равна нулю. Как правильно установить атрибуты?

ответ

0

Проблема в том, что вы используете одинарные кавычки для текста шаблона? Только GStrings может использовать $ notation для вставки переменных. Одинарные кавычки сделать это регулярное Java String, который не будет подменять свою ценность в

Попробуйте это:.

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

Спасибо, Дэвид, но это не сработало. Я также попытался переключить одиночные/двойные кавычки вокруг или использовать тройные кавычки. Ничего не помогло. –

+0

@AlexanderShyrokov Что вы видите, если вы печатаете 'attrs' из библиотеки тегов. – David

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

+0

Это тоже не работает для меня. –

+0

Странно. Я тестировал его без проблем в своей среде ... Как вы запускаете свои тесты? Из командной строки? Интерактивная консоль? STS? – Philippe

+0

Я использовал STS для этого. Я попробую использовать командную строку. –

Смежные вопросы