gpt4 book ai didi

grails - 在 Grails 中使用 spock 测试 Action

转载 作者:行者123 更新时间:2023-12-02 14:25:22 26 4
gpt4 key购买 nike

当内容类型为 application/json 时,我想测试一个操作

我的 Action 是这样的:

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"
}

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

错误是:
response.contentAsString == "red"
| | |
| null false

如果我将 Controller 稍微修改为:
     json {
def colorInstance = new Color(params.colors)
render "${params.colors}"
}

那么错误也是一样的:
response.contentAsString == "red"
| | |
| null false

所以我怀疑 params.colors从未到达 Controller ...?

最佳答案

这对我有用:

注意:- 我使用了 given设置参数。看起来像设置为 JSON请求也绑定(bind)到 params在 Controller 中。

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"
}

关于grails - 在 Grails 中使用 spock 测试 Action ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16624031/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com