Rspec 测试控制器中是否调用了另一个作用域中的方法

Rspec 测试控制器中是否调用了另一个作用域中的方法,rspec,rspec-rails,Rspec,Rspec Rails,我有以下控制器方法: def create_charge payment = Payment.where('order_id = ?', 1).first if payment.date <= Date.today err = payment.execute_off_session(customer.id, create_in_wms = true) else order.update_attributes(status: :partial

我有以下控制器方法:

def create_charge
    payment = Payment.where('order_id = ?', 1).first

    if payment.date <= Date.today
      err = payment.execute_off_session(customer.id, create_in_wms = true)
    else
      order.update_attributes(status: :partially_paid)
    end
end

您可以对一个类的所有实例设置期望值,这并不总是理想的,但它应该适用于您的用例:

描述“期望的任何实例”
在做之前
期望(Object.)的任何实例接收(:foo.)和返回(:返回值)
结束
它“验证类的一个实例是否收到消息”do
o=Object.new
expect(o.foo.)to eq(:返回值)
结束
它“除非实例收到该消息,否则将失败”do
o=Object.new
结束
结束
(来源)

就你而言:

describe Api::V1::OrdersController, type: :controller do
  describe "#create_charge" do
    context "fingerprinting a card only" do
      it "should'nt call #execute_off_session" do
        expect_any_instance_if(Payment).not_to receive(:execute_off_session)
        post :create_charge, {:params => {:uid => @order.uid}}
      end
    end
  end
end
describe Api::V1::OrdersController, type: :controller do
  describe "#create_charge" do
    context "fingerprinting a card only" do
      it "should'nt call #execute_off_session" do
        expect_any_instance_if(Payment).not_to receive(:execute_off_session)
        post :create_charge, {:params => {:uid => @order.uid}}
      end
    end
  end
end