我试图用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'
伙计们,请你告诉我应该改变什么以克服这个错误。感谢您的帮助!
答案 0 :(得分:0)
您的params
是规范代码;它只是试图成为一个局部变量。放入您希望params[:tab_filter]
包含的任何内容。
而且,一般来说,你不应该写测试 - oops我的意思是“例子” - 只是重复代码所说的。你不关心你的控制器调用部分;你关心控制器用包含某某值的HTML做出响应。
答案 1 :(得分: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')
规范来确认正在渲染模板,并根据渲染视图的内容测试选项卡过滤器。