0

私は何か間違ったことを理解したようです。クラスがあります

module Spree
  class OmnikassaPaymentResponse
    #...
    # Finds a payment with provided parameters trough ActiveRecord.
    def payment(state = :processing)
      Spree::Payment.find(:first, :conditions => { :amount => @amount, :order_id => @order_id, :state => state } ) || raise(ActiveRecord::RecordNotFound)
    end
  end
end

Rspecで指定されているもの:

describe "#payment" do
  it 'should try to find a Spree::Payment' do
    Spree::Payment.any_instance.stub(:find).and_return(Spree::Payment.new)
    Spree::Payment.any_instance.should_receive(:find)
    Spree::OmnikassaPaymentResponse.new(@seal, @data).payment
  end
end

ただし、これは常に をスローしActiveRecord::RecordNotFoundます。私は、Spree::Payment のインスタンスが何であれany_instance.stub(:find).and_return()、どこで a を呼び出しても、必ず何かを返すことを期待していました。#find

しかし、そうではありません。stub.and_return|| raise(ActiveRecord::RecordNotFound)

私の仮定、私のコードは間違っていますか? 他の何か?

4

1 に答える 1

2

あなたの場合findはインスタンスメソッドではなく、のクラスメソッドですSpree::Payment。つまりany_instance、次のようにせずに直接スタブする必要があります。

Spree::Payment.stub(:find).and_return(Spree::Payment.new)
于 2012-04-26T08:24:04.410 に答える