2014-02-25 22 views
0

我搜索一種方法來檢索模擬定義的源位置。例如。我想在rspec中有這樣的內容:獲取模擬定義的源位置(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

你很近。 source_location爲這是由method返回Method定義如下:

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被調用的行。

+0

謝謝,這很接近。我認爲我無法通過method_double.rb創建存根的方式輕鬆獲取源位置。 – theldoria

+0

你在找什麼來源? –

+0

帶@ x.stub(:fkt)的行。 – theldoria