私はActiveRecord Model、PricePackageを持っています。それはbefore_createコールバックを持っています。このコールバックでは、第三者APIを使用してリモート接続を行います。私は工場の女の子を使用しており、このAPIをスタブして、テスト中に新しいファクトリが構築されたときにリモート呼び出しが行われないようにしたいと考えています。アクティブレコードを模擬してスタブする方法factory_girlでコールバックbefore_createコールバック
私はモックとスタブにRspecを使用しています。私がいる問題は、RSpecの方法は私のfactories.rb以内に利用できないということである
モデル:
class PricePackage < ActiveRecord::Base
has_many :users
before_create :register_with_3rdparty
attr_accessible :price, :price_in_dollars, :price_in_cents, :title
def register_with_3rdparty
return true if self.price.nil?
begin
3rdPartyClass::Plan.create(
:amount => self.price_in_cents,
:interval => 'month',
:name => "#{::Rails.env} Item #{self.title}",
:currency => 'usd',
:id => self.title)
rescue Exception => ex
puts "stripe exception #{self.title} #{ex}, using existing price"
plan = 3rdPartyClass::Plan.retrieve(self.title)
self.price_in_cents = plan.amount
return true
end
end
工場:
#PricePackage
Factory.define :price_package do |f|
f.title "test_package"
f.price_in_cents "500"
f.max_domains "20"
f.max_users "4"
f.max_apps "10"
f.after_build do |pp|
#
#heres where would like to mock out the 3rd party response
#
3rd_party = mock()
3rd_party.stub!(:amount).price_in_cents
3rdPartyClass::Plan.stub!(:create).and_return(3rd_party)
end
end
私が取得するかどうかはわかりませんrspecモックとスタブヘルパーは私のfactories.rbにロードされ、これはこれを処理する最良の方法ではないかもしれません。
をそれはfにするのはいいことですそれを裏返して、人々が与える答えの1つにそれを割り当てます。それをせずに単に蒸発する –
'after_build'の' pp.stub(:register_with_3rdparty){true} 'はエラーを発生させますか? – lulalala