2017-08-17 121 views
0

我有一個方法是這樣的:Rspec的測試與模擬的靜態方法和非靜態方法

def self.method 
    #API CALL 
end 

而我寫調用此靜態方法控制方法的測試。它是這樣的:

it 'update order to confirmed' do 
    Order.should_receive(:process_payment).and_return({}) 
    sign_in user 
    attributes = FactoryGirl.attributes_for(:order, :valid_order) 
    patch :confirm_order, params: { id: order.id, order: attributes } 
    order.reload 
    expect(order.confirmed).to eq true 
end 

它工作正常。但是我必須使這個方法不是靜態的,並且測試開始失敗。

在我的控制,我現在打電話像這樣的方法:

Order.new.process_payment(@order) 

問題是與我的模擬我想,但我看不出如何解決這個問題。關於如何使我的模擬適應這種新格式的任何想法?

回答

1

您可以使用allow_any_instance_of方法:

allow_any_instance_of(Order).to receive(:process_payment).and_return({}) 
0

伊戈爾的回答工作正常。我也設法使它像這樣工作:

Order.any_instance.should_receive(:process_payment).and_return({})