2016-07-24 2 views
1

Я пишу контроллер_spec_test с использованием Rspec на модели под названием Form. И я использую FactoryGirl для генерации моделей. Когда я запускаю индивидуальные тесты в form_controller_spec, они все проходят. Однако, когда я запускаю весь файл, я вижу, что все тесты терпят неудачу, а сообщение об ошибке - ActiveRecord::RecordInvalid: Validation failed: Form type can't be blank.Фабричная девушка неправильно делает атрибуты

Вот мой forms.rb Factorygirl файл, FactoryGirl.define сделать

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

    end 
end 

Вот мой form.rb модель файла:

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 

Вот мой forms_controller_spec.rb файл:

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 

Я не понимаю, что проходят отдельные тесты, но тесты не работают, когда я запускаю весь файл. И я также не знаю, почему form_type пуст.

ответ

0

Ваш метод form_attributes отсутствует соответствующее значение для: form_type

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

Хотя вы и не может показаться, чтобы сделать свой ум, хотите ли вы строку или целое число, так как в вызове выше для let(:forms) вы прошли в целых числах 3. Это несоответствие, которое, вероятно, должно быть исправлено так или иначе.

+0

Подождите, я смущен. Я помещаю целое число 3 для создания трех моделей 'form'. Я думал, что это синтаксис. И причина, по которой я не прошел атрибут ('form_type'), состоит в том, что я думал, что' последовательность' в блоке 'factory: form do' автоматически генерирует атрибут, даже если я не устанавливаю его явно как вы dud, – JoHksi

+0

Я честно никогда использовали «последовательность», поэтому вы, вероятно, правы. Тем не менее, нигде вы не придаете значения form_type, вроде «Form A» или «Form C», что, очевидно, то, что вы ожидаете, поэтому я думаю, что это то, что вы должны смотреть на изменение, поскольку, конечно, оно не устанавливается. – user2792268

Смежные вопросы