2017-08-17 118 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({})