Ruby on rails Rspec测试控制器使用局部变量渲染部分
我有这样的动作Ruby on rails Rspec测试控制器使用局部变量渲染部分,ruby-on-rails,ruby,rspec-rails,rspec3,Ruby On Rails,Ruby,Rspec Rails,Rspec3,我有这样的动作 def get_status status_name = current_user.status status_updated_time = current_user.updated_at render :partial => 'show_status', :locals => {status_name: status_name, status_updated_time: status_updated_time} end 在这里,我计划测试通过rende
def get_status
status_name = current_user.status
status_updated_time = current_user.updated_at
render :partial => 'show_status', :locals => {status_name: status_name, status_updated_time: status_updated_time}
end
在这里,我计划测试通过render partial传递的局部变量值。i、 estatus\u name
,status\u updated\u time
请告诉我如何在控制器中使用局部变量编写渲染部分的RSpec。我会将变量逻辑移到一个单独的方法中:
def get_status
render partial: 'show_status', locals: get_status_from(current_user)
end
protected
def get_status_from(user)
{ status_name: user.status, status_updated_time: user.updated_at }
end
并测试该方法 我想说的是,要测试控制器,您需要的是一个基本的功能/集成规范,您可以在其中简单地查找您的部件所包含的内容
feature 'SomeController' do
background do
# setup data
# and anything else you need for authentication, etc. as your site dictates
end
scenario 'viewing the get status page' do
visit some_controller_get_status_path
expect(page).to have_text('WHATEVER IS IN THE LOCAL VAR')
end
end
我更喜欢使用功能规格而不是控制器规格(但经常失败!),以保持我的控制器如此简单,以至于没有太多可测试的东西。有了功能规格,我觉得我从测试中获得了更多关于我的应用程序如何工作的信息,等等
编辑:对不起。。。过早点击回车:)
对于控制器,您可以沿着以下线路直接测试var值:
describe "Your Controller", :type => :controller do
describe "GET get_stuff" do
it "assigns a value to status_name" do
get :get_status
expect(assigns(:status_name)).to eq(['VALUE'])
end
end
end
对于一个控制器规范来说,这可能不是100%正确的(同样,我也不经常使用它们),但我认为如果你将控制器规范置于功能/集成规范之上,那么这应该会让你走上正轨。你可以做类似的事情
it "should render correct partial for get_status" do
controller.should_receive(:render).with({
:partial => '_show_status', #here you will have to give the full path like <controller_name>/_show_status
:locals => {status_name: <name>, status_update_time: <time>}
})
get 'get_status'
end
它“应该为get_状态提供正确的部分”do
控制器。应接收(:render)。带有({
:partial=>'_show_status',#这里您必须给出完整路径,如/_show_status
:locals=>{状态\名称:,状态\更新\时间:}
})
获取“获取状态”
结束