如何在视图规范中存根当前用户的属性

时间:2012-09-08 09:13:18

标签: ruby-on-rails rspec mocking stubbing

我有一个视图规范,我正在测试条件输出。如何让规范返回我模拟过的用户?

查看文件

.content
 - if @current_user.is_welcome == true
  Welcome to the site 

查看规范

before(:each) do 
  @user = mock_model(User)
  @user.stub!(:is_welcome).and_return(true)
  view.stub(:current_user).and_return(@user) 
end

it "show content" do 
  #assign(:current_user, stub_model(User, dismiss_intro: true))
  render
  rendered.should have_content("Welcome to the site")
end

运行规范会返回undefined method is_welcome for nil:NilClass

2 个答案:

答案 0 :(得分:1)

您已将名为current_user的方法存根,而不是实例变量@current_user

view.stub(:current_user).and_return(@user)

这意味着,在视图中,您应该使用:

.content
 - if current_user.is_welcome == true
  Welcome to the site

请注意,它调用方法current_user而不是获取@current_user实例变量。

如果你需要一个实例变量,建议你创建一个方法current_user,它获取实例变量并返回它。

答案 1 :(得分:1)

我最终做了这个,让我在我的视图中保留@current_user变量并使规范通过:

before :each do
  @user = stub_model(User, is_welcome: true)
  assign(:current_user, @user)
end

然后测试条件性,只需在具有不同前块的上下文中运行另一个规范:

before :each do
  @user = stub_model(User, is_welcome: false)
  assign(:current_user, @user)
end