Frage

Update

unten beantwortet. Falls die verlinkten Seite angezeigt wird, können Sie Mokka verwenden den Anfangszustand und verhindert das Überschreiben wie in Stub ...

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

  ...
end

Original Frage

Ich bin derzeit läuft die Fungiert als State Machine Rails Plugin (hat eine große Zeitersparnis war, nebenbei bemerkt) und einige Herausforderungen, die es mit Factory Girl (auch wunderbar) verwenden.

Ich möchte in der Lage, das Objekt-Zustand zu versetzen, wenn ich das Objekt mit Fabriken erstellen. Eine allgemeine Möglichkeit, diese Frage zu stellen ist: „Wie nennt man Methoden der Klasse, wenn ein Objekt mit Fabriken zu schaffen?“

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

Ich kann immer die t.activate nennen! Verfahren in jedem Test, aber das wird meine Tests spröde machen. Ich bin nach einer Möglichkeit, diese Methode bei der Fabrik Schaffung Ebene zu laufen oder es innerhalb factory.rb gesetzt.

Danke ...

War es hilfreich?

Lösung

Sie können einen Mockframework (Mokka) verwenden set_initial_state außer Kraft zu setzen und den korrekten Zustand auf dem Objekt zu erhalten.

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

Idee von hier .

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top