Я пишу контроллер_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
пуст.
Подождите, я смущен. Я помещаю целое число 3 для создания трех моделей 'form'. Я думал, что это синтаксис. И причина, по которой я не прошел атрибут ('form_type'), состоит в том, что я думал, что' последовательность' в блоке 'factory: form do' автоматически генерирует атрибут, даже если я не устанавливаю его явно как вы dud, – JoHksi
Я честно никогда использовали «последовательность», поэтому вы, вероятно, правы. Тем не менее, нигде вы не придаете значения form_type, вроде «Form A» или «Form C», что, очевидно, то, что вы ожидаете, поэтому я думаю, что это то, что вы должны смотреть на изменение, поскольку, конечно, оно не устанавливается. – user2792268