rspec视图存根和部分

rspec视图存根和部分,rspec,views,partials,stubs,Rspec,Views,Partials,Stubs,我正在用RSpec(Rails3.2.8上的2.12)测试一个视图。我使用CanCan在页面上有条件地显示某些元素。这需要控制器方法“当前用户”。在我的一些规范中,我已经能够删除当前的用户,例如。 controller.stub(:当前用户)和返回(etc) 或 视图、存根等 这适用于我的一些规格。但我有一对夫妇不工作,我不明白为什么 它不起作用的两个规范测试一个视图,该视图向下调用一个partial,并在partial中访问“current_user”作为一个方法。错误是 undefined

我正在用RSpec(Rails3.2.8上的2.12)测试一个视图。我使用CanCan在页面上有条件地显示某些元素。这需要控制器方法“当前用户”。在我的一些规范中,我已经能够删除当前的用户,例如。 controller.stub(:当前用户)和返回(etc) 或 视图、存根等

这适用于我的一些规格。但我有一对夫妇不工作,我不明白为什么

它不起作用的两个规范测试一个视图,该视图向下调用一个partial,并在partial中访问“current_user”作为一个方法。错误是

undefined local variable or method `current_user' 
所以我想我的问题是如何正确地存根方法,以便可以在部分内部访问它们


应该如何做?

控制器存根不起作用,因为您不是在测试控制器,而是在测试视图。只需使用视图存根即可:

view.stub(:current_user).and_return(etc)
这应该在局部和视图中都有效


请参阅:

这是我尝试的第一件事,但它不起作用,所以我尝试了controller.stub,但也不起作用。所以现在我很困惑。我可以让view.stub(etc)工作,当且仅当它是一个正在测试的单级视图时。如果视图调用了分部,那么该方法在分部中不可用。啊!我算出了,我需要有view.stub(:current_user)和controller.stub(:current_user)。在视图中对当前_用户的任何引用都会转到view.stub,在CanCan能力类中对当前_用户的任何引用都会转到controller.stub