rspec 验证失败 [英] rspec failing validations
问题描述
我有一个 meeting.rb 和 user.rb 模型
i have a meeting.rb and user.rb model
会议.rb
class Meeting < ActiveRecord::Base
attr_accessible :intro, :proposed_date, :proposed_location
validates :requestor_id, presence: true
validates :requestee_id, presence: true
belongs_to :requestor, class_name: "User"
belongs_to :requestee, class_name: "User"
end
用户.rb
class User < ActiveRecord::Base
attr_accessible :name, :email, :password, :password_confirmation
has_secure_password
has_many :sent_meetings, :foreign_key => "requestor_id", :class_name => "Meeting"
has_many :received_meetings, :foreign_key => "requestee_id", :class_name => "Meeting"
我不知道如何防止我的 meeting_spec.rb 验证失败.出于某种原因,我的 sent_meetings 或 requests_meetings(会议类)没有链接到他们各自的请求者或被请求者(用户类)(最后两个代码块,当 requestor_id 不存在时",当 requestee_id 不存在时"做).
I cannot figure out how to prevent my meeting_spec.rb validations from failing. For some reason, my sent_meetings or requested_meetings (class Meeting) are not linking to their respective requestor or requestee (class User) (last two blocks of code, "when requestor_id is not present", "when requestee_id is not present" do).
meeting_spec.rb
meeting_spec.rb
require 'spec_helper'
describe Meeting do
let(:requestee) { FactoryGirl.create(:user) }
let(:requestor) { FactoryGirl.create(:user) }
before { @received_meeting = requestee.received_meetings.build(intro: "Lorem ipsum") }
before { @sent_meeting = requestor.sent_meetings.build(intro: "Lorem ipsum") }
describe "sent meetings" do
subject { @sent_meeting }
it { should respond_to(:intro) }
it { should respond_to(:requestor_id) }
it { should respond_to(:requestor) }
its(:requestor) { should == requestor }
it { should be_valid }
end
describe "received meetings" do
subject { @received_meeting }
it { should respond_to(:intro) }
it { should respond_to(:requestee_id) }
it { should respond_to(:requestee) }
its(:requestee) { should == requestee }
it { should be_valid }
end
describe "accessible attributes" do
it "should not allow access to requestor_id" do
expect do
Meeting.new(requestor_id: requestor.id)
end.should raise_error(ActiveModel::MassAssignmentSecurity::Error)
end
it "should not allow access to requestee_id" do
expect do
Meeting.new(requestee_id: requestee.id)
end.should raise_error(ActiveModel::MassAssignmentSecurity::Error)
end
end
describe "when requestor_id is not present" do
before { @sent_meeting.requestor_id = nil }
it { should be_valid }
end
describe "when requestee_id is not present" do
before { @received_meeting.requestee_id = nil }
it { should be_valid }
end
end
这是我得到的 rspec 错误:
Here is the rspec error I get:
Failures:
1) Meeting sent meetings
Failure/Error: it { should be_valid }
expected valid? to return true, got false
# ./spec/models/meeting_spec.rb:17:in `block (3 levels) in <top (required)>'
2) Meeting received meetings
Failure/Error: it { should be_valid }
expected valid? to return true, got false
# ./spec/models/meeting_spec.rb:26:in `block (3 levels) in <top (required)>'
Finished in 0.77435 seconds
42 examples, 2 failures
Failed examples:
rspec ./spec/models/meeting_spec.rb:17 # Meeting sent meetings
rspec ./spec/models/meeting_spec.rb:26 # Meeting sent meetings
非常感谢有关如何在用户(请求者、被请求者)和会议(sent_meeting、requested_meeting)之间建立这种关联的任何意见.
Would really appreciate any input on how to make this association between User (requestor, requestee) and Meeting (sent_meeting, requested_meeting).
谢谢!
推荐答案
在您的模型中,您要求同时存在两个 id
in your model you're requesting the presence of both ids with
validates :requestor_id, presence: true
validates :requestee_id, presence: true
所以如果你在你的规范中没有其中之一
so if you nil one of them as in your spec
describe "when requestor_id is not present" do
before { @sent_meeting.requestor_id = nil }
it { should be_valid }
end
它们是无效的,无效的,因为您在这种情况下声明它们无效.
they are invalid, not valid, as you declared them not to be valid in this case.
这篇关于rspec 验证失败的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!