JSON 形式で REST 要求を処理するコントローラーの統合テストを作成しようとしています。私のコントローラーは、次のように作成します。
class FooController {
...
def create() {
withFormat {
html {
[fooInstance: new Foo(params)]
}
json {
[fooInstance: new Foo(params.JSON)]
}
}
}
...
}
そして、次のような統合テストがあります。
@TestFor(FooController)
class FooControllerTests extends GroovyTestCase {
void testCreate() {
def controller = new FooController()
controller.request.contentType = "text/json"
// this line doesn't seem to actually do anything
controller.request.format = 'json'
// as of 2.x this seems to be necessary to get withFormat to respond properly
controller.response.format = 'json'
controller.request.content = '{"class" : "Foo", "value" : "12345"}'.getBytes()
def result = controller.create()
assert result
def fooIn = result.fooInstance
assert fooIn
assertEquals("12345", fooIn.value)
}
}
しかし、fooIn は常に null です。テストをデバッグすると、FooController.create() が呼び出されたときに params も空であることがわかります。確かに、統合テストが内部でどのように機能するかについてはよくわかりませんが、Foo インスタンスを表すデータが表示されることを期待していました。
何か案は?