Domanda

Aggiornamento

Risposta sotto. Nel caso in cui il sito collegato scompaia, puoi usare la moka per bloccare lo stato iniziale e impedire la sovrascrittura come in ...

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

  ...
end

Domanda originale

Attualmente sto eseguendo il plug-in Acts As State Machine Rails (è stato un enorme risparmio di tempo, per inciso) e ho delle difficoltà ad usarlo con Factory Girl (anche meraviglioso).

Voglio essere in grado di impostare lo stato dell'oggetto quando creo l'oggetto con Factory. Un modo generalizzato di porre questa domanda è & Quot; come si chiamano i metodi di classe quando si crea un oggetto con Factory? & 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">

Posso sempre chiamare t.activate! metodo all'interno di ogni test, ma questo renderà i miei test fragili. Sto cercando un modo per eseguire questo metodo a livello di creazione di Factory o impostarlo in factory.rb.

Grazie ...

È stato utile?

Soluzione

Puoi usare un mocking framework (mocha) per sovrascrivere set_initial_state e ottenere lo stato corretto sul tuo oggetto.

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

Idea rubata da qui .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top