Pregunta

Actualizar

Respondido a continuación. En caso de que el sitio vinculado desaparezca, puede usar mocha para ocultar el estado inicial y evitar sobrescribir como en ...

require 'mocha'
class OrderTest < ActiveSupport::TestCase
  def setup
    Order.any_instance.stubs(:set_initial_state)
    @order = Factory(:order, :state => "other_state")
  end

  ...
end

Pregunta original

Actualmente estoy ejecutando el complemento Acts As State Machine Rails (ha sido un gran ahorro de tiempo, por cierto) y tengo algunos desafíos para usarlo con Factory Girl (también maravilloso).

Quiero poder establecer el estado del objeto cuando creo el objeto con Fábricas. Una forma generalizada de hacer esta pregunta es & Quot; ¿cómo se llaman los métodos de clase al crear un objeto con Fábricas? & Quot;

class Transporter < ActiveRecord::Base
  validates_presence_of :company_name, :on => :update
  acts_as_state_machine :initial => :created, :column => 'status'
  state :created
  state :active
  state :inactive, :after => :inactivate_transporter_activity
end

Factory.define :transporter do |f|
  f.sequence(:company_name) {|n| "transporter_company#{n}"}
end

>> t=Factory(:transporter)
=> <Transporter ... status: "created">
>> t=Factory(:transporter, :status => 'active')
=> <Transporter ... status: "created"> #as expected, changes state back
>> t.activate!
=> true
>> t
=> <Transporter ... status: "active">

¡Siempre puedo llamar a t.activate! método dentro de cada prueba, pero esto hará que mis pruebas sean frágiles. Estoy buscando una manera de ejecutar este método en el nivel de creación de Factory o configurarlo en factory.rb.

Gracias ...

¿Fue útil?

Solución

Puede usar un marco de imitación (mocha) para anular set_initial_state y obtener el estado correcto en su objeto.

>> require 'mocha'
=> []
>> Transporter.any_instance.stubs(:set_initial_state)
=> #<Mocha::Expectation:0x21ee6e4 ...
>> t = Factory(:transporter, :state => "active")
=> #<Transporter ... state: "active">

Idea robada de aquí .

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top