2011-12-21 71 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