使用mock进行Rspec测试,用于静态方法和非静态方法

时间:2017-08-17 13:26:06

标签: ruby-on-rails unit-testing rspec mocking

我有这样的方法:

674900368

我正在为调用此静态方法的控制器方法编写测试。就像这样:

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

问题在于我的模拟,我想,但我看不出如何解决它。关于如何使我的模拟适应这种新格式的任何想法?

2 个答案:

答案 0 :(得分:1)

您可以使用allow_any_instance_of方法:

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

答案 1 :(得分:0)

伊戈尔的答案很好。我也设法让它像这样工作:

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