获取模拟定义的源位置(rspec)

时间:2014-02-25 10:44:49

标签: rspec mocking

我搜索一种方法来检索模拟定义的源位置。例如。我想在rspec中有这样的东西:

describe "mocking AnyObj" do
  before(:each) do
    @x = Object.new
    @x.stub(:fkt)
  end

  it "should return source location of @x.stub(:fkt)" do
     @x.method(:fkt).source_location[1].should == 4
  end
end

这样做的原因是提供了一种调试rspec文件的方法。

1 个答案:

答案 0 :(得分:1)

你很亲密。 source_location的定义Methodmethod返回,如下所示:

describe "mocking AnyObj" do
  before(:each) do
    @x = Object.new
    @x.stub(:fkt)
  end

  it "should show source location" do
     @x.method(:fkt).source_location[1].should == 4
  end
end

请注意,您还有x.stub(:fkt)而不是@x.stub(:fkt)

最后,请注意,您从method_double.rb文件中获取了一个行号(至少在我检查过的RSpec版本中),它显示了实际存根定义发生的行号(例如,类评估def fkt ....或某些此类)。没有办法在测试中引用stub被调用的地方。