Обновление
Ответ ниже. В случае, если связанный сайт исчезает, вы можете использовать mocha, чтобы заглушить начальное состояние и предотвратить перезапись, как в ...
require 'mocha'
class OrderTest < ActiveSupport::TestCase
def setup
Order.any_instance.stubs(:set_initial_state)
@order = Factory(:order, :state => "other_state")
end
...
end
Оригинальный вопрос
В настоящее время я запускаю плагин Acts As State Machine Rails (кстати, это сэкономило много времени) и испытываю некоторые трудности при использовании его с Factory Girl (тоже замечательно).
Я хочу иметь возможность устанавливать состояние объекта при создании объекта с помощью фабрики. Обобщенный способ задать этот вопрос: «Как вы вызываете методы класса при создании объекта с фабриками?»
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">
Я всегда могу позвонить t.activate! метод в каждом тесте, но это сделает мои тесты хрупкими. Я ищу способ запустить этот метод на уровне создания фабрики или установить его в factory.rb.
Спасибо ...