Как мне выполнить модульное тестирование именованных конфигураций для маршаллеров объектов

#grails #spock

#grails #спок

Вопрос:

У меня есть контроллер, который использует именованную конфигурацию для маршаллеров объектов

 JSON.use( isAdmin ? 'adminApi' : 'publicApi') {
    respond book
}
  

Как мне выполнить модульное тестирование приведенной выше строки кода с использованием grails spock framework.

Ответ №1:

Вы можете сделать это по инструкции: контроллеры модульного тестирования и согласование содержимого в разделе Тестирование согласования содержимого (вам нужно немного прокрутить, чтобы добраться до этого раздела).

Вот так:

 @TestFor(FooController)
@Mock(Foo)
class FooControllerSpec extends Specification {

    def setup () {
       //... setup custom marshaller ...
    }

    // format parameter, assert on string response

    def "responds with admin result using format" () {
        when:
        params.isAdmin = true
        params.format='json'
        controller.foo()

        then:
        response.text == '{"something":"something"}'
    }

    // or using accept header, assert on parsed json    

    def "responds with admin result using accept header" () {
        when:
        params.isAdmin = true
        request.addHeader "Accept", "application/json"
        controller.foo()

        then:
        def json = response.json
        json.something == 'something'
    }
}