2016-07-24 20 views
1

Ich schreibe einen controller_spec_test mit Rspec auf einem Modell namens Form. Und ich benutze FactoryGirl, um Modelle zu generieren. Wenn ich einzelne Tests in form_controller_spec führe, bestehen sie alle. Wenn ich jedoch die gesamte Datei ausführe, sehe ich, dass alle Tests fehlschlagen und der Fehler msg ist ActiveRecord::RecordInvalid: Validation failed: Form type can't be blank.Fabrikmädchen macht Attribute nicht richtig

Hier ist meine forms.rb factory Datei, FactoryGirl.define tun

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 
      @forms = forms 
     end 

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

end 

Ich bekomme nicht, dass einzelne Tests aber vorübergehen Die Tests sind fehlgeschlagen, wenn ich die gesamte Datei ausführen. Und ich weiß auch nicht, warum form_type leer ist.

Antwort

0

Ihre: form_attributes Methode einen entsprechenden Wert fehlt für: form_type

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

Obwohl Sie auch Ihre Meinung bilden kann nicht scheinen, ob Sie eine Zeichenfolge oder eine ganze Zahl wollen, wie es in dem Aufruf oben let(:forms) Sie haben in der Ganzzahl 3 übergeben. Das ist eine Inkonsistenz, die wahrscheinlich auf die eine oder andere Weise behoben werden muss.

+0

Warten Sie, ich bin verwirrt. Ich setze Integer 3, um drei 'Form'-Modelle zu erstellen. Ich dachte, das wäre die Syntax. Und der Grund, warum ich das Attribut ('form_type') nicht bestanden habe, ist, weil ich dachte,' sequence' in 'factory: form do' block erzeugt automatisch das Attribut, auch wenn ich es nicht explizit setze wie du, – JoHksi

+0

Ich habe es ehrlich gesagt nie getan verwendet "Sequenz", damit Sie wahrscheinlich Recht haben. Nichtsdestoweniger geben Sie keinen Wert für form_type wie "Form A" oder "Form C", was offensichtlich ist, was Sie erwarten, also denke ich, dass Sie das ändern sollten, da es natürlich nicht gesetzt ist. – user2792268