2013-08-26 3 views
3
  • Grails 2.2.4
  • Спок 0,7

Я пытаюсь проверить, что правильный вид визуализируется из контроллера Grails. Мой метод создания выглядит следующим образом:Утверждая вид с Grails Спока Test Unit для контроллеров

def create() { 
    def documentCategories = DocumentCategory.list() 
    def documentTypes = DocumentType.list() 
    def documentComponents = DocumentComponent.list() 
    [documentCategories: documentCategories, 
     documentTypes: documentTypes, 
     documentComponents:documentComponents] 
} 

И мой тест:

def "test create action"() { 
    given: 
    def model = controller.create() 

    expect: 
    response.status == 200 
    model.documentCategories.size() == 0 
    model.view == '/document/create' 
} 

Я пробовал различные версии model.view включая:

view == '/document/create' 
response.forwardedUrl == '/document/create' 

все из которых терпят неудачу, потому model.view, view , и response.forwardedUrl - все значения равны нулю. Предложения? должны работать при условии,

+0

Bump! Вы когда-нибудь это решали? Я в аналогичной ситуации ... – marko

ответ

4

Поскольку вы не определяете представление явно в методе контроллера, тогда будут выполняться соглашения Grails. В соответствии с документацией будет выбрано представление, совпадающее с именем контроллера и метода -> view: "controllerName/methodName"

Что касается вашей проблемы, вы не должны проверять, работает ли рамка Grails. Вы должны проверить, что ваш контроллер ведет себя так, как вы хотите.

В этом случае вы хотите проверить, что ваш контроллер не указывает представление, так как это ожидаемое поведение вашего контроллера.

Тест на это будет:

then: 
    controller.modelAndView == null 
    response.redirectedUrl == null 

Как ModelAndView будет создан, если вы могли бы назвать «рендеринга (вид: ххх)» в вашем контроллере.

Calling редирект() или цепь() в результатах контроллера к response.redirectedUrl заселяться в тестовом модуле

0

Попробуйте добавить следующие строки в тесте, как указано в Grails Test docs

import grails.test.mixin.TestFor 
@TestFor(MyController) 
+0

Уже есть и не имеет значения – Gregg

1
view.endsWith('/document/create') 

viewmodel и явно вынесено из controller.

//controller 
render view: 'create', model: [documentCategories: documentCategories, 
           documentTypes: documentTypes, 
           documentComponents:documentComponents] 

В случае JUnit тесты явного упоминания о viewmodel и не является обязательным, но для Спока спецификации требуется.

+0

Я не хочу явно визуализировать представление. Так что это не сработает для меня. – Gregg

+0

@Gregg В этом случае, боюсь, вам нужно вернуться к испытаниям JUnit, которые соответствуют вашему потребностям в этом конкретном тесте. – dmahapatro