2011-12-21 91 views
0

我有一个控制器,只允许特定的动作自检:Grails的2.0.0:HTTP状态302

static allowedMethods = [save: "POST", update: "POST", delete: "POST"] 

然后有一个测试吧:

void testUpdateWithGet() { 
    controller.update() 
    assert response.status == HttpServletResponse.SC_METHOD_NOT_ALLOWED 
} 

这工作得很好2.0。 0.RC1,但升级到Grails 2.0.0最终版后,响应中的返回状态为302。这是为什么?

问候

乔纳斯

+0

如果我明确地设置方法,我会得到相同的'request.method =“GET”'。一些类似的测试甚至会返回'200',这意味着通话正常。 – Jonas 2011-12-22 00:18:56

+0

值得一提的是,对于所有控制器,“save”操作返回200以及“更新”和“删除”302。 – Jonas 2011-12-22 04:01:12

+0

鉴于如果我不是从单元测试而是从命令行通过curl测试这个问题,并且我无法重现你的302s,我猜测有关如何直接调用该方法的问题有些不妥。 我会建议删除您的allowedMethods条件并打印出您的控制器中的request.method,然后运行您的测试。只是为了让你可以看到默认值是什么。 – 2011-12-22 06:46:28

回答

3

我可以确认你的测试用例。这是因为自2.0.0.RC3开始Grails有一个未解决的bug也影响2.0.0 final:http://jira.grails.org/browse/GRAILS-8426 - 在单元测试中不允许使用允许的方法。你可以降级到2.0.0.RC1或等待这个bug修复。它只影响单元测试,但在应用程序中工作正常。

+0

谢谢,由于某种原因,我期待这一点。我一会儿升级到RC3,然后看到问题并再次降级到RC1。但现在最终版本已经发布了,我不想再降级了。所以,我很高兴等待错误得到解决。我用一个大的评论调整了我的单元测试... – Jonas 2011-12-22 22:55:24