Spock在Grails中测试POST服务

时间:2017-03-07 09:24:12

标签: grails

编辑2:弄清楚如何传递一个整数,但是现在我的测试失败了,因为返回的值是空的,但渲染是网页上的正确值。

编辑:我已经弄清楚如何使用request.method通过POST传递值,但是我现在无法弄清楚如何使用请求将int传递到控制器,因为每个addParameter都需要字符串。

我在grails中有一个转换应用程序,其中二进制和十六进制服务都通过post获取参数,然后将其转换为二进制或十六进制并返回结果。我现在正在编写一些Spock测试来测试每个服务,但如果需要通过POST而不是GET发送参数,我似乎无法弄清楚如何测试服务。

二进制转换服务:

def binary() {

    if (request.method == 'POST') {

        if (session.user) {
            Integer number = params.getInt('number')
            String binary = Integer.toBinaryString(number)

            def r = new Results()

            r.customerID = session["id"]
            r.username = session["username"]
            r.ConvertService = "binary"
            r.number = number
            r.result = binary
            r.date = new Date()

            r.time = new Timestamp(System.currentTimeMillis())

            if(r.save()) {
                render binary
            } else {
                render r.getErrors()
            }


        } else {
            redirect(controller: 'main')
        }
    } else {
        response.sendError(405)
    }
}

Spock测试:

void "Binary Service should return 1100"() {
    given:
        def convert = new ConvertController()
    when:
        def result = convert.binary(12)
    then:
        result == 1100

}

这就是我现在的测试回报:

    groovy.lang.MissingMethodException: No signature of method: eadassignment.ConvertController.binary() is applicable for argument types: (java.lang.Integer) values: [12]
Possible solutions: binary(), any(), <init>(), index(), every(), find()

    at org.codehaus.groovy.grails.plugins.web.api.ControllerTagLibraryApi.methodMissing(ControllerTagLibraryApi.java:97)
    at eadassignment.ConvertControllerSpec.Binary Service should return 1100(ConvertControllerSpec.groovy:22)

1 个答案:

答案 0 :(得分:0)

弄清楚我的所有问题。最后一个是因为函数检查了一个有效的用户是否存在测试失败的原因显而易见。