如何对对象Marshallers的命名配置进行单元测试

时间:2014-07-07 07:04:46

标签: grails spock

我有一个控制器,它使用对象marshallers的命名配置

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

如何使用grails spock框架对上面的代码行进行单元测试。

1 个答案:

答案 0 :(得分:0)

您可以通过以下书籍执行此操作:测试内容协商中的unit testing controllerscontent negotiation(您必须滚动一下才能到达该部分)。

像这样:

@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'
    }
}