在运行时而不是在存根声明时执行rspec存根?

时间:2012-03-22 23:00:56

标签: ruby-on-rails ruby rspec rspec2

假设我需要存根一个方法,以便返回当前时间: MyClass.stub(:my_method).and_return(Time.now.utc)

问题是,这个存根在存根声明时返回时间,而不是在我运行MyClass.new.my_method时。

有没有办法在调用方法时运行存根?

2 个答案:

答案 0 :(得分:1)

将一个块传递给and_return,它可以完成你想要在运行时完成的工作,就像这样......

describe MyClass do

  it "runs at runtime" do
    puts Time.now.utc

    MyClass.stub(:my_method).and_return do
      Time.now.utc
    end
    sleep 5.seconds

    puts MyClass.my_method
  end
end

答案 1 :(得分:0)

对于一个实例方法,我可以在接收之后添加一个块

allow_any_instance_of(MyClass)
  .to receive(:method_name) do
    executed_at_runtime
  end.and_return(result_to_return)