如何踩灭了当前用户的属性在视图中规范(How do I stub out a current use

2019-07-31 10:58发布

我在那里我测试条件输出视图规范。 我如何规范回到我嘲笑了用户?

查看文件

.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

Answer 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 ,它得到的实例变量并返回它。



Answer 2:

最后我做这里面让我保持@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


文章来源: How do I stub out a current user's attributes in a view spec