2014-02-13 2 views
2

Учитывая это действие в контроллере:controller.modelAndView является недействительным в тесте интеграции

def listBlockedMembers() { 
    def blocked = UserBlock.findAllByUser(springSecurityService.currentUser) 

    render(view:'listBlockedMembers', model:[blocked:blocked]) 
} 

в моей интеграции тест модель и вид работает отлично:

def blocked = controller.modelAndView.model['blocked'] 
assertEquals 2, blocked.size() 

, но если я прохожу модель от действие, как это:

def listBlockedMembers() { 
    def blocked = UserBlock.findAllByUser(springSecurityService.currentUser) 
    [blocked:blocked] 
} 

Я получаю исключение нулевого указателя при доступе controller.modelAndView (пустого указателя на сам атрибут modelAndView)

Мой интеграционный тест распространяется GroovyTestCase. В то время как первое действие работает, второе меньше кода, и мне интересно, почему возникло бы исключение нулевого указателя. В разработке gsp делает то же самое для обоих действий.

ответ

0

Там на самом деле Grails bug для этого, и это связано с двумя типами возврата обрабатывается по-разному:

Есть 2 сценария обсуждается здесь. Один из них - сценарий, когда метод контроллера возвращает карту, а один - это сценарий, когда метод в контроллере не возвращает карту. В случае, когда метод не возвращает карту, для этого обсуждения мы говорим о методе, вызвавшем метод рендеринга.

Таким образом, при возвращении карты может быть лучше рассматривать его как обычный метод (и иметь дело с возвращаемым значением), чем при вызове controller.modelAndView. Например:

Map response = controller.listBlockedMembers() 
assert response.blocked 
Смежные вопросы