2010-07-29 81 views
0

通過:show:edit等操作,我可以通過http獲取它們。但由於:update操作沒有模板,因此如果不抱怨模板丟失,則無法發出GET。這是有道理的,所以我試圖直接調用@controller.update在我的測試,但我得到了respond_to塊上的錯誤:如何爲控制器中的更新操作編寫功能測試?

NoMethodError: undefined method `parameters' for nil:NilClass 

如何指定請求的格式是:html?我傳遞了模型屬性FWIW的參數哈希值。感謝您的任何建議。

編輯: 我因爲試圖調用@ controller.update在控制檯和錯誤上面引述從這裏向上冒泡(設置PARAMS []之後):/actionpack-2.3.8/lib/action_controller/mime_responds.rb

我也嘗試PUT而不是GET,但仍然得到「缺少模板update.erb」。

而且,我設法找出失蹤模板的這個錯誤是由具有其它任何比重定向或標記這裏的代碼塊渲染:

respond_to do |format| 
    if @model.update_attributes(params[:model]) 
    flash[:notice] = 'note!' 
    format.html { **HERE** } 
    ... 

我有一個方法調用有沒有被只是一個條件重定向到適當的地方。原則上,我可以理解爲什麼它可能會尋找一個模板來渲染,因爲它可能不知道下游有更多的重定向,但我不明白的是我的web應用程序沒有運行到相同的錯誤作爲我的功能測試。

回答

0
  • 你應該在你的測試中打電話put :update。如果您在控制器中有類似@my_model.update_attributes(params[:my_model])的代碼,那麼您可以在測試中撥打put :update, :id => <whatever>, :my_model => {:foo => 'bar'}
  • :html是默認格式,所以您不需要指定它。如果你真的想,你可以做put :update, :format => :html。但是,沒有必要。
  • 正如艾米麗說,這是params,不parameters,所以你可能訪問到了錯誤的散列

總體來說,這一問題可以使用的一些更詳細說一下你正在試圖做的和你目前的代碼看起來像。

+0

感謝您的想法。我嘗試了PUT,但得到了「缺少模板update.erb」。我編輯了原文,以澄清我使用的是參數,而不是「參數」。我還發現了一個更具體的問題原因,但仍然不瞭解其根源。 – user258980 2010-07-30 06:19:23

0

我認爲你的基本問題是更新方法通常不是get請求。你應該是post那個動作。

雖然您聽到的錯誤聽起來像是遇到了更嚴重的問題。 Rails使用params,而不是parameters,所以這是一個很奇怪的錯誤。我不知道這是否與直接在控制器上調用方法有關,因此沒有Rails期望的其他上下文或者是否存在其他問題。如果切換到post不能修復它,請用您的測試正文更新您的問題。

相關問題