Как связать шаблон рендеринга с контроллером в интеграционных тестах в Grails 3 - PullRequest
0 голосов
/ 12 марта 2019

Я обновил проект Grails с 2.5 до 3.3.9. В существующей версии есть тестовый пример интеграции для контроллера, в котором утверждается поведение шаблона рендеринга контроллера

ex:

class UserController {

    def list = {
        render(template: 'list', model: [userInstanceList:User.list(params)])
    }
}

И интеграционные тесты с использованием grails 2.x

class UserControllerSpec extends IntegrationSpec{

    UserController controller
    Map renderedMap

    public void setup() {
        controller = new UserController()

        UserController.metaClass.render = { Map map ->
            renderedMap = map
        }
    }

    public void cleanup() {

    }

    void "test user list"(){
        when:
        controller.list()

        then:
        renderedMap.template.equals('list')
        renderedMap.model.userInstanceList.size() > 0
    }
}

Как видно из примера, привязка metaClass.render поможет нам разобраться с шаблоном assert

Но в Grails 3 многие вещи меняютсятак что теперь я обновил контрольные примеры, например,

@Integration(applicationClass = Application.class)
@Rollback
class UserControllerSpec extends Specification{
    @Autowired
    UserController controller
    Map renderedMap


   //Mock web request code or other logic


    public void setup() {

        UserController.metaClass.render = { Map map ->
            renderedMap = map
        }
    }

    public void cleanup() {

    }

    void "test user list"(){
        when:
        controller.list()

        then:
        renderedMap.template.equals('list')
        renderedMap.model.userInstanceList.size() > 0
    }
}

Но здесь я получаю нулевое значение в renderderedMap.

Есть ли здесь обходной путь?Также есть ли способ получить доступ к флэш-сообщения в тесте?

Спасибо

...