【问题标题】:Rspec: how to test partial render with locals and params?Rspec:如何使用本地和参数测试部分渲染?
【发布时间】:2013-11-01 15:33:46
【问题描述】:

我正在尝试使用 Rspec 测试这部分控制器:

def popup_company
  if params[:partial].present?
    render partial: "popup_company/pages", locals: { tab_filter: params[:tab_filter] }
  end
end

这是我用于测试上述部分的控制器规格:

controller.should_receive(:render).with({
:partial => 'popup_company/pages',
:locals => {tab_filter: params[:tab_filter]}
})

但是,我收到此错误:

undefined local variable or method `params'

伙计们,请告诉我我应该改变什么来克服这个错误。感谢您的帮助!

【问题讨论】:

    标签: ruby-on-rails testing rspec bdd rspec-rails


    【解决方案1】:

    所以 params[:tab_filter] 在您的请求中,所以它大概在您的获取中。也就是说,你有类似的东西:

    get :popup_company, tab_filter: 'XXXXX', partial: 'YYYYY'
    

    在您的规范中。您应该为 tab_filter 参数创建一个变量随机值,并使用它来验证是否将适当的值传递给渲染。类似的东西

    tab_filter = SecureRandom.hex(10)
    get :popup_company, tab_filter: tab_filter, partial: 'YYYYY'
    controller.should_receive(:render).with({
      partial: 'popup_company/pages',
      locals: { tab_filter: tab_filter } })
    

    或者,您可以使用render_template('popup_company/pages') 规范来确认模板正在呈现,并根据呈现的视图的内容测试选项卡过滤器。

    【讨论】:

      【解决方案2】:

      您的params 在规范端代码中;它只是想成为一个局部变量。放入您希望 params[:tab_filter] 包含的任何内容。

      而且,一般来说,你不应该编写测试——哎呀,我的意思是“示例”——只是重复代码所说的内容。你不在乎你的控制器调用部分;您关心控制器是否使用包含某某值的 HTML 进行响应。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-01-12
        • 1970-01-01
        • 2011-05-24
        • 2016-12-09
        • 1970-01-01
        • 2013-06-18
        相关资源
        最近更新 更多