Wie überschreiben Sie: set_initial_state von AASM beim Testen mit Factory Girl Fabriken?
-
20-08-2019 - |
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 ...
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 .