Pergunta

Atualizar

Respondido abaixo. Caso o site vinculado desapareça, você pode usar o Mocha para tirar o estado inicial e impedir a substituição como em ...

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

  ...
end

Pergunta original

Atualmente, estou executando os atos como plug -in do State Machine Rails (tem sido um enorme economizador de tempo, aliás) e tendo alguns desafios o usá -lo com a fábrica (também maravilhosa).

Quero poder definir o estado do objeto quando criar o objeto com fábricas. Uma maneira generalizada de fazer essa pergunta é "Como você chama os métodos de classe ao criar um objeto com fábricas?"

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">

Eu sempre posso chamar o T.Activate! Método em todos os testes, mas isso tornará meus testes quebradiços. Estou procurando uma maneira de executar esse método no nível de criação de fábrica ou defini -lo no fábrica.rb.

Obrigado...

Foi útil?

Solução

Você pode usar uma estrutura de zombaria (mocha) para substituir o set_initial_state e obter o estado correto em seu objeto.

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

Ideia roubada de aqui.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top