9

rspec 1.3.2 を使用して、次のようなコントローラー アクションをテストしています。

def action_foo
  ...
  @bar.can_do_something?
  ...
end

@bar( class のインスタンスであると仮定してBar) インスタンス変数をスタブしようとしていますが、できません。アクセスできればできると思いますが、使用しているrspecのバージョンでは利用できませんany_instanceBar.any_instance.stub(:can_do_something?)

アクセスしてスタブする別の方法はあり@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)

4

3 に答える 3

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)
于 2014-11-04T23:52:02.460 に答える
1
 Bar.any_instance.stub(:can_do_something?)
于 2013-01-16T15:50:02.073 に答える
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
于 2013-01-16T23:46:41.383 に答える