Tengo un modelo ActiveRecord, PricePackage. Eso tiene una llamada de vuelta before_create. Esta devolución de llamada utiliza una API de terceros para establecer una conexión remota. Estoy usando factory girl y me gustaría cerrar esta API para que cuando se construyan nuevas fábricas durante la prueba, las llamadas remotas no se realicen.Cómo simular y resguardar el registro activo before_create callback with factory_girl
Estoy usando Rspec para burlas y trozos. El problema que estoy teniendo es que los métodos RSpec no están disponibles dentro de mi factories.rb
modelo:
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
fábrica:
#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
No estoy seguro de cómo obtener el rspec mock y stub helpers cargados en mis factories.rb y esta podría no ser la mejor manera de manejar esto.
Como acotación al margen, cuando se asigna una recompensa a una pregunta que recompensa será tomado de su reputación, independientemente de si se asigna así que es algo bueno que hacer para f ahórrelo y asócielo a una de las respuestas que da la gente. Sin hacerlo, simplemente se evapora –
¿'pp.stub (: register_with_3rdparty) {true}' en 'after_build' provoca algún error? – lulalala