使用rspec,validates_associated和validates_presence_of无法正常工作?

Bvu*_*Ic7 6 ruby ruby-on-rails

我有一个用户模型和一个友谊模型.

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
Run Code Online (Sandbox Code Playgroud)

我的一个rspec测试是

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
Run Code Online (Sandbox Code Playgroud)

测试不应该是有效的,因为没有用户使用user_id 9999.但测试说友谊模型是有效的.

为什么地狱?

编辑:

但我想测试如下所述 - >而不直接分配发件人.不是吗?

Ell*_*son 11

如果您希望模型以这种方式工作,请更改:

validates_presence_of :receiver_id, :sender_id
Run Code Online (Sandbox Code Playgroud)

对此:

validates_presence_of :receiver, :sender
Run Code Online (Sandbox Code Playgroud)