Учитывая, что модель настроена следующим образом:
class Course < ApplicationRecord
belongs_to :faculty
has_many :teachings
has_many :faculty, through: :teachings
validates :name, uniqueness: { scope: [:faculty_id, :period,
:semester, :year] }
end
class Faculty < ApplicationRecord
has_secure_password
has_many :courses
has_many :courses, :through => :teachings
validates :email, { presence: true, uniqueness: true }
validates :first_name, presence: true
validates :last_name, presence: true
validates :password, presence: true
end
Я пытаюсь протестировать творение, конечно, вот так:
RSpec.describe Course, :type => :model do
it "is valid with when period and faculty are unique" do
course = create(:course)
expect(course).to be_invalid
end
end
При запуске теста я получаю следующую ошибку:
1) Course is valid with when period and faculty are unique Failure/Error: course = create(:course)
ActiveRecord::RecordInvalid: Validation failed: Faculty must exist
Я пробовал создать факультет и использовать его при создании курса, но все же мне повезло.
Я искал, как бороться с заводским ботом и связями, и пробовал кое-что из этого, но я слишком невежественен в тестировании, чтобы заставить его работать. Я надеюсь получить некоторое представление о моей ситуации прямо сейчас.





проверки выполняются во время экономии времени, вместо этого вы хотите использовать build.
it "is valid with when period and faculty are unique" do
course = build(:course, faculty: create(:faculty))
expect(course).to be_invalid
end
это вызовет под капотом course.valid?, что вы пытаетесь доказать.
Спасибо за вашу помощь, но теперь я понимаю это. Кажется, пытается перебрать один объект? NoMethodError: undefined method each 'для # <Faculty: 0x00007fc3f55908b0> `
у вас factuly указан дважды как ассоциация, я думаю, вам просто нужен belongs_to
я ответил на твой вопрос?