给出这样的模型设置:
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)课程在时期和教员独特的情况下有效 失败/错误:课程=创建(:课程)
ActiveRecord::RecordInvalid: Validation failed: Faculty must exist
我曾尝试过创建一个教师,并在创建课程时使用它,但仍然很幸运。
我已经研究了如何处理工厂漫游器和关系,并尝试了其中的一些方法,但是我对测试一无所知,无法使其正常工作。我希望现在就我的情况获得一些见识。
答案 0 :(得分:1)
验证是在保存时运行的,您要做的是使用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?
。