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