我有一个视图规范,我正在测试条件输出。如何让规范返回我模拟过的用户?
查看文件:
.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
答案 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