Tôi có Mô hình người dùng và Mô hình hữu nghị.validates_associated và validates_presence_of không hoạt động như mong đợi với rspec?
class Friendship < ActiveRecord::Base
belongs_to :sender, :class_name=>'User', :foreign_key=>'sender_id'
belongs_to :receiver, :class_name=>'User', :foreign_key=>'receiver_id'
validates_presence_of :receiver_id, :sender_id
validates_associated :receiver, :sender
end
class User < ActiveRecord::Base
has_many :sent_friendships, :class_name => "Friendship", :foreign_key => "sender_id", :dependent => :destroy
has_many :received_friendships, :class_name => "Friendship", :foreign_key => "receiver_id", :dependent => :destroy
end
và là một trong rspec-thử nghiệm của tôi là
describe Friendship do
before(:each) do
@valid_attributes = {
:sender_id => 1,
:receiver_id => 2,
:accepted_at => nil
}
end
it "should not be valid with non-existant receiver_id" do
f = Friendship.new(@valid_attributes)
f.receiver_id = 99999
f.should_not be_valid
end
end
Xét nghiệm này không nên có giá trị, vì không có người dùng với user_id 9999. Tuy nhiên, thử nghiệm nói là quan hệ hữu nghị mô hình là hợp lệ.
Tại sao địa ngục?
EDIT:
Nhưng tôi muốn kiểm tra như đã đề cập -> mà không gán cho người gửi trực tiếp. Không phải là có thể ??
Không tạo sự khác biệt. Hoạt động trong giao diện điều khiển, không hoạt động với thử nghiệm (ít nhất là không sử dụng đồ đạc) – Espen
AFAIK, validates_presence_of trên tên liên kết chỉ hoạt động như mong đợi khi đối tượng là bản ghi mới. Nếu bạn đang lấy ra một fixture hiện có từ db và sửa đổi receiver_id trực tiếp, sau đó kiểm tra này sẽ thất bại, trừ khi bạn thiết lập receiver đến nil trước. –