2010-10-04 18 views
3

我面臨着rspec的問題和控制器使用問題rspec的更新動作軌3

我正在spec'ing的更新動作,所以做我調用下面的代碼:

put :update, :id => "1", :ntp => {:name=>'myservah'} 

我的控制器有下面的代碼:

def update 
if @ntp.update_attributes(params[:ntp]) 
    flash.now[:notice] = "Successfully updated ntp." 
else 
    flash.now[:error] = ((errors_to_a(@ntp)*'.<br />')+'.') 
end 
render :partial => 'update' 
end 

而且我發現了以下錯誤:

失敗/錯誤:put:update,:id =>「1」,::ntp => {:name =>'myservah'} 缺少部分ntps/update:{:handlers => [:erb,:rjs,:生成器,:rhtml,:rxml],:格式=> [:html],:locale => [:en,:en]}在視圖路徑「#」

我應該明確說出哪個處理程序我有?今天我的部分被命名爲'_update.js.erb'。

順便說一句,我的代碼工作,我呈現更新的「JS」的版本,因爲我只需要運行一些腳本

回答

13

Rails的檢測從一定要求的參數,包括HTTP接受請求頭響應的格式(智能猜測),:format參數或頁面擴展名。

除非指定,否則Rails將請求格式默認爲:html

如您所見,您的請求默認爲:html,這意味着Rails正在嘗試呈現_update.html.erb模板。有可以應用到解決這一問題的一些變化:

  1. 總是在測試中指定的請求格式,如果比HTML不同。

    # emulate a js request 
    put :update, :id => "1", :ntp => {:name=>'myservah'}, :format => :js 
    

    如果動作旨在使用xhr方法

    # emulate an XHR request 
    xhr :put, :update, :id => "1", :ntp => {:name=>'myservah'}, :format => :js 
    
  2. 返回406與任何非JS響應來響應一個AJAX請求,運行測試。更改render :partial => 'update'

    respond_to do |format| 
        format.js { render :partial => 'update' } 
        format.any { head 406 } 
    end 
    
+0

我不得不改變只是控制器,並添加格式..感謝「406」尖..者均基於HXR語法,至少在rspec的2.0.0是錯誤的。 – 2010-10-05 08:22:23

+0

對不起,它是'xhr'。我確定了答案。 – 2010-10-05 09:46:10