使用rails 3对rspec更新操作的问题

VP.*_*VP. 3 rspec ruby-on-rails ruby-on-rails-3

我正面临着rspec和控制器的问题

我正在指定更新操作,所以为此我调用以下代码:

put :update, :id => "1", :ntp => {:name=>'myservah'}
Run Code Online (Sandbox Code Playgroud)

我的控制器有以下代码:

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
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

失败/错误:put:update,:id =>"1",: ntp => {:name =>'myservah'}缺少部分ntps/update with {:handlers => [:erb,:rjs,:builder, :rhtml,:rxml],:formats => [:html],:locale => [:en,:en]}在视图路径"#"中

我的问题是:我应该明确说出我有哪个处理程序?今天我的部分名为'_update.js.erb'.

顺便说一句,我的代码工作,我渲染更新的"js"版本,因为我只是运行一些脚本

Sim*_*tti 13

Rails从某些请求参数中检测响应的格式,包括http接受请求标头(智能猜测),:format参数或页面扩展.

除非指定,否则Rails会将请求格式默认为:html.

如您所见,您的请求默认为:htmlRails尝试呈现_update.html.erb模板的方式.您可以应用一些更改来解决此问题:

  1. 如果不同于html,请始终在测试中指定请求格式.

    # emulate a js request
    put :update, :id => "1", :ntp => {:name=>'myservah'}, :format => :js
    
    Run Code Online (Sandbox Code Playgroud)

    如果操作旨在响应AJAX请求,请使用该xhr方法运行测试

    # emulate an XHR request
    xhr :put, :update, :id => "1", :ntp => {:name=>'myservah'}, :format => :js
    
    Run Code Online (Sandbox Code Playgroud)
  2. 使用任何非js响应返回406.更改render :partial => 'update'

    respond_to do |format|
      format.js  { render :partial => 'update' }
      format.any { head 406 }
    end
    
    Run Code Online (Sandbox Code Playgroud)