【问题标题】:problem to rspec update action using rails 3使用rails 3 rspec更新操作的问题
【发布时间】:2011-04-20 21:41:50
【问题描述】:

我遇到了 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'} 缺少使用 {:handlers=>[:erb, :rjs, :builder, :rhtml, :rxml], :formats=>[:html], :locale=>[:en, :en]} 的部分 ntps/更新查看路径“#”

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

顺便说一句,我的代码有效,我渲染了“js”版本的更新,因为我只是运行了一些脚本

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3 rspec


    【解决方案1】:

    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
      

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

      # emulate an XHR request
      xhr :put, :update, :id => "1", :ntp => {:name=>'myservah'}, :format => :js
      
    2. 使用任何非 js 响应返回 406。将render :partial =&gt; 'update'更改为

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

    【讨论】:

    • 我只需要更改控制器并添加格式。感谢“406”提示。顺便说一句,hxr 语法,至少在 rspec 2.0.0 中是错误的。
    • 抱歉,我是xhr。我确定了答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-08-23
    • 1970-01-01
    • 2011-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多