2013-02-20 66 views
1

我的測試用例低於:Rspec的存根方法調用記錄

petition1 = Petition.create 
    petition2 = Petition.create 

    petition1.should_receive(:test_method).with(7).and_return(50.0) 
    petition2.should_receive(:test_method).with(7).and_return(25.0) 

    petition1.test_method(7) # => 50.0 
    Petition.first.test_method(7) # => 0.0 

    petition2.test_method(7) # => 25.0 
    Petition.last.test_method(7) # => 0.0 

我如何存根化方法要求直接從數據庫中檢索的記錄?

我正在迭代單元測試中的記錄,我需要對某些記錄進行方法調用才能返回特定的響應。

回答

0

這裏的問題是(如你所發現的)調用查找方法將創建一個新的實例Petition。爲了解決這個問題,你可以存根查找方法本身,就回到你想要的對象:

let(:petition1) { Petition.create } 
let(:petition2) { Petition.create } 

it "does what I want" do 
    Petition.stub(:first) { petition1 } 
    Petition.stub(:last) { petition2 } 
    petition1.should_receive(:test_method).with(7).and_return(50.0) 
    petition2.should_receive(:test_method).with(7).and_return(25.0) 
    # test code 
end 

不幸的夫婦,任何你正在測試的實施規範。如果您使用其他方式獲取請願書,可能會中斷。更具彈性的方法可能會使用工廠,並創建具有適當屬性的請求。