1

当内容类型为application/json

我的动作是这样的:

def save () {
  request.withFormat {
     json {
        def colorInstance = new Color(params.colors)
        render "${colorInstance.name}"
     }

     html {
       //do html stuff
     }
  }

我有以下内容,但似乎不起作用:

def "js test" () {
    when:
    controller.save()
    request.contentType = "application/json"
    request.content = '{"colors": {"name": "red"} }'

    then:
    response.contentAsString == "red"
}

我相信问题在于我在测试中向控制器发送 json 的方式。这是正确的方法吗?

错误是:

response.contentAsString == "red"
|        |               |
|        null            false

如果我将控制器稍微修改为:

     json {
        def colorInstance = new Color(params.colors)
        render "${params.colors}"
     }

那么错误也是一样的:

response.contentAsString == "red"
|        |               |
|        null            false

所以我怀疑params.colors控制器永远不会到达......?

4

1 回答 1

3

这对我有用:

注意:-我曾经given设置参数。看起来JSON请求的设置也绑定到params控制器中。

def save() {
        request.withFormat {
            json {
                def colorInstance = new Color(params.colors)
                render "${colorInstance.colorName}"
            }

            html {
                //do html stuff
            }
        }
    }

//域颜色

class Color {
    String colorName
    Boolean isPrimaryColor
}

//Spock 测试

def "json test" () {
        given:
            request.contentType = "application/json"
            request.JSON = '{colors: {colorName: "red", isPrimaryColor: true} }'
        when:
            controller.save()
        then:
            assert response.status == 200
            assert response.contentAsString == "red"
    }
于 2013-05-18T14:20:28.353 回答