Ruby on rails Rspec:如何使用局部变量和参数测试部分渲染?
我正在尝试使用Rspec测试控制器的这一部分:Ruby on rails Rspec:如何使用局部变量和参数测试部分渲染?,ruby-on-rails,testing,rspec,bdd,rspec-rails,Ruby On Rails,Testing,Rspec,Bdd,Rspec Rails,我正在尝试使用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 => '
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'
伙计们,你们能告诉我,我应该改变什么来克服这个错误吗。我感谢你的帮助 您的
参数
位于规范侧代码上;它只是试图成为一个局部变量。输入您希望params[:tab\u filter]
包含的任何内容
而且,一般来说,您不应该编写仅仅重复代码所述内容的测试(我指的是“示例”)。你不在乎你的控制器调用一个部分;您关心的是控制器用包含某某值的HTML进行响应。so参数[:tab_filter]在您的请求中,因此它可能在您的get中。也就是说,您有类似于:
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_模板(“popup_company/pages”)
spec确认模板正在呈现,并根据呈现视图的内容测试选项卡过滤器