Ruby on rails 使用rails 3执行rspec更新操作时出现问题

Ruby on rails 使用rails 3执行rspec更新操作时出现问题,ruby-on-rails,ruby-on-rails-3,rspec,Ruby On Rails,Ruby On Rails 3,Rspec,我面临rspec和控制器的问题 我正在指定一个更新操作,因此为此,我调用以下代码: 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(

我面临rspec和控制器的问题

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

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'}
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
def更新
如果@ntp.update_属性(参数[:ntp])
flash.now[:notice]=“已成功更新ntp。”
其他的
flash.now[:error]=((errors_to_a(@ntp)*'。
'))+。) 结束 呈现:部分=>“更新” 结束
我得到了以下错误:

失败/错误:put:update,:id=>1,:ntp=>{:name=>'myservah'} 在视图路径“#”中缺少带有{:handlers=>[:erb,:rjs,:builder,:rhtml,:rxml],:formats=>[:html],:locale=>[:en,:en]}的部分NTP/更新

我的问题是:我应该明确说出我有哪个处理器吗?今天我的部分代码名为“_update.js.erb”


顺便说一句,我的代码工作正常,我呈现了“js”版本的更新,因为我只运行了一些脚本,Rails检测来自某些请求参数的响应格式,包括http接受请求头(智能猜测)、
:format
参数或页面扩展

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

如您所见,您的请求默认为
:html
,这意味着Rails正在尝试呈现
\u update.html.erb
模板。您可以应用一些更改来解决此问题:

  • 如果与html不同,请始终在测试中指定请求格式

    # emulate a js request
    put :update, :id => "1", :ntp => {:name=>'myservah'}, :format => :js
    
    如果操作旨在响应AJAX请求,请使用
    xhr
    方法运行测试

    # emulate an XHR request
    xhr :put, :update, :id => "1", :ntp => {:name=>'myservah'}, :format => :js
    
  • 返回406和任何非js响应。将渲染:部分=>“更新”更改为

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

  • 我只需更改控制器并添加格式。。谢谢你的“406”提示。。顺便说一句,hxr语法,至少在RSPEC2.0.0中是错误的。很抱歉,它是
    xhr
    。我修正了答案。