我正在使用rspec 1.3.2来测试看起来像这样的控制器动作:
def action_foo
...
@bar.can_do_something?
...
end
我正在尝试存根@bar
(假设它是类Bar
的实例)实例变量,但我无法。我想如果我可以访问any_instance
那么我就可以Bar.any_instance.stub(:can_do_something?)
但是我在使用的rspec版本中没有这个版本。
是否有其他方式可以访问和存根@bar
?以下都不起作用:
@bar.stub(:can_do_something?)
controller.instance_variable_get("@bar").stub(:can_do_something?)
controller.stub_chain(:bar, :can_do_something?)
Bar.new.stub(:can_do_something?)
编辑:
@bar
在before_filter
中分配。像@bar = Bar.find(n)
答案 0 :(得分:3)
为了记录,我认为这有点清洁:
bar = Bar.new # or use FactoryGirl to create a Bar factory
bar.stub(:can_do_something?) { # return something }
controller.instance_variable_set(:@bar, bar)
答案 1 :(得分:1)
Bar.any_instance.stub(:can_do_something?)
答案 2 :(得分:1)
如果所有其他方法都失败了,您可以执行类似于any_instance.stub的操作。为了记录,这让我觉得很脏。
Bar.class_eval do
alias :original_can_do_something? :can_do_something?
def can_do_something? # "stub" method
# Return whatever you need here
end
end
# Run your test
Bar.class_eval do
alias :can_do_something? :original_can_do_something? # "unstub" the method
end