Создание пользовательского метода TagLib в тесте модуля контроллера - PullRequest
2 голосов
/ 16 апреля 2011

У меня есть метод в пользовательском taglib, например:

def deleteAction = {attrs ->
    def id = attrs['id']
    def type = attrs['type']
    def clazz = attrs['class']
    def html = new MarkupBuilder(out)
    html.span(class: "${clazz} ui-icon ui-icon-trash {id:'${id}'}")
}

У меня есть контроллер, который использует этот метод, и я пытаюсь заглушить его для модульного теста, поэтому у меня есть следующее:

def mockMyTagLib = mockFor(MyTagLib)
    mockMyTagLib.demand.deleteAction(1) {id, type, clazz ->
    def html = new MarkupBuilder(new StringWriter())
    html.span(class: "${clazz} ui-icon ui-icon-trash {id:'${id}'}")
}

controller.metaClass.mn = mockMyTagLib.createMock()

Но я продолжаю получать следующее:

Больше нет звонков на «deleteAction» ожидается в этот момент. Конец чего-либо требования.

Я что-то здесь не так делаю? Вот его фактическое использование в контроллере:

"${mn.deleteAction(id: it.id, type: 'bookProduct', 'class': 'del-book-product')}"

1 Ответ

2 голосов
/ 18 апреля 2011

Следующее от Тестирование - Справочная документация

... Затем вы указываете имя метод, который вы хотите издеваться с необязательный диапазон в качестве аргумента. это Диапазон определяет, сколько раз вы ожидать, что метод будет вызван, так что если количество вызовов падает за пределами этого диапазона (либо слишком мало или слишком много) тогда ошибка утверждения будет брошен. Если нет диапазона указано, по умолчанию "1..1" предполагается, что метод должен быть вызывается ровно один раз.

Вы указали require.deleteAction (1), что означает, что метод должен вызываться один раз и только один раз.

Кроме того, если вы хотите, вы всегда можете установить макет свободным, указав его в качестве второго параметра в mockFor (по умолчанию строгое)

mockFor(class, loose = false)
...