У меня есть пользовательский тег lib, который я написал, чтобы я мог легко отображать свойства объекта.Это позволяет мне звонить
<g:property label="Name" property="${user.name}"/>
, что делает мои взгляды короткими и последовательными, а также позволяет мне быстро вносить изменения.Мой код taglib выглядит следующим образом:
def property = {attrs, body ->
def startingHtml = "..."
def endingHtml = "..."
out << startingHtml
renderField(attrs.property)
out << endingHtml
}
def renderField(property) {
if (property instanceof Collection) {
property.each { out << it + "</br>" }
} else if(property instanceof Address){
renderAddress(property)
} else {
out << property
}
}
def renderAddress(address) {
out << "Address Render Logic Here"
}
Я пытаюсь добавить некоторые модульные тесты вокруг этого кода, потому что в нем есть логика.Используя примеры, найденные здесь (http://grails.org/doc/latest/guide/testing.html#unitTestingTagLibraries), я начал добавлять некоторые тесты. Первые два сценария, которые в настоящее время обрабатывает мой тег, - это String и Collection, которые я смог протестировать правильно (первые два теста ниже). Последний сценарий, которыйМне нужно проверить, является ли объект Address (это просто POGO с атрибутами String). Я не могу найти способ протестировать передачу объекта в качестве атрибута в тег lib.
@TestFor(PropertyTagLib)
class PropertyTagLibTests {
@Test
void propertyTagShouldRenderPropertyInsideOfTDWhenPropertyIsAString() {
String result = applyTemplate('<g:property label="something" property="someTextValue"/>').trim()
assert result.contains('someTextValue')
}
@Test
void propertyTagShouldRenderList() {
String result = applyTemplate('g:property label="something" property="[\"one\", \"two\", \"three\"]"/>').trim()
assert result.contains("one</br>two</br>three</br>")
}
@Test
void propertyTagShouldRenderPropertyInsideOfTDWhenPropertyIsAnAddress() {
def address = new Address(line1: "Line 1")
String result = applyTemplate('<g:property label="something" property="${address}"/>').trim()
assert result.contains("Address Render Logic Here")
}
}
Как я могу проверить мой taglib, если один из атрибутов является объектом?