0

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

查看文件

.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

4

2 回答 2

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,该方法获取实例变量并返回它。

于 2012-09-08T09:18:16.250 回答
1

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

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

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

before :each do
  @user = stub_model(User, is_welcome: false)
  assign(:current_user, @user)
end
于 2012-09-08T17:21:51.757 回答