2016-07-25 3 views
1

Ich verwende FactoryGirl und befülle das eindeutige Attribut, wenn das Modell erstellt wird. Das Problem mit meinem Modell form ist, dass nur 4 verschiedene Typen für form_type Attribut verfügbar sind. Also muss ich die sequence jedes Mal zurücksetzen, wenn ich Tests ausführen. Wie unten, ich Benutzer before do Block zu rufen FactoryGirl.reload. Allerdings habe ich in einem Artikel gesehen, dass es sich um ein Anti-Pattern für FactoryGirl handelt. Was ist der beste Weg, die Sequenz in FactoryGirl zurückzusetzen, anstatt vor jedem Test FactoryGirl.reload aufzurufen?Korrekte Methode zum Zurücksetzen der Sequenz in FactoryGirl vor jedem Test

Hier ist meine forms.rb factory Datei,

FactoryGirl.define do 
    factory :form do 
    association :user 
     sequence :form_type do |n| 
      Form.form_types.values[n] 
     end 

    end 
end 

Hier ist meine form.rb Modelldatei:

class Form < ActiveRecord::Base 
    belongs_to :user, required: true 

    enum form_types: { :a => "Form A", :b => "Form B", :c => "Form C", :d => "Form D"} 

    validates :form_type, presence: true 
    validates :form_type, uniqueness: {scope: :user_id} 

end 

Hier ist meine forms_controller_spec.rb Datei:

require 'rails_helper' 

RSpec.describe FormsController, type: :controller do 

    login_user 

    let(:form) { 
     FactoryGirl.create(:form, user: @current_user) 
    } 

    let(:forms) { 
     FactoryGirl.create_list(:form , 3, user: @current_user) 

    } 

    let(:form_attributes) { 
     FactoryGirl.attributes_for(:form, user: @current_user) 
    } 

    describe "GET #index" do 
     before do 
      FactoryGirl.reload 
     end 

     it "loads all of the forms into @forms" do 
      get :index 
      expect(assigns(:forms)).to match_array(@forms) 
     end 
    end 

end 

Antwort

0

Hm Es scheint, als ob der Zweck von FG-Sequenzen darin besteht, eindeutige Zahlen sicherzustellen. Oder zumindest habe ich es dafür benutzt. Sie können möglicherweise in FG hacken, wenn dies das ist, was Sie wirklich wollen.

Diese Frage kann helfen.

How can I reset a factory_girl sequence?

Verwandte Themen