1

我正在尝试使用 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'

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

4

2 回答 2

0

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

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

于 2013-11-01T15:45:04.183 回答
0

所以 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')规范来确认正在渲染模板,并根据渲染视图的内容测试选项卡过滤器。

于 2013-11-01T15:45:44.670 回答