كيف يمكنك تجاوز: set_initial_state من AASM عند الاختبار مع مصانع المصنع؟

StackOverflow https://stackoverflow.com/questions/1054786

سؤال

تحديث

أجاب أدناه. في حالة اختفاء الموقع المرتبط ، يمكنك استخدام 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 كمساعد State Machine Rails (لقد كان التوفير الزمني الضخم ، بالمناسبة) ولدي بعض التحديات التي تستخدمها مع مصنع فتاة (رائعة أيضًا).

أريد أن أكون قادرًا على تعيين حالة الكائن عندما أقوم بإنشاء الكائن مع المصانع. طريقة معممة لطرح هذا السؤال هي "كيف يمكنك استدعاء أساليب الفصل عند إنشاء كائن مع المصانع؟"

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! الطريقة في كل اختبار ، ولكن هذا سيجعل اختباراتي هشة. أنا أبحث عن طريقة لتشغيل هذه الطريقة على مستوى إنشاء المصنع أو ضبطها في المصنع.

شكرًا...

هل كانت مفيدة؟

المحلول

يمكنك استخدام إطار عمل للسخرية (MOCHA) لتجاوز SET_INITIAL_STATE والحصول على الحالة الصحيحة على كائنك.

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

فكرة سرقت من هنا.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top