0

我升级到 Rails 3 和 RSpec 2,我的一项 RSpec 测试停止工作:

# Job.rb
class Job < ActiveRecord::Base
  has_one :location
  belongs_to :company

  validates_associated :location
end

# Location.rb
class Location < ActiveRecord::Base 
  belongs_to :job
end

# job_spec.rb
describe Job, "location" do
  it "should have a location" do
    job = Factory(:job)
    location = Factory(:location, :job_id => job.id)

    location.job.should == job      #true
    job.location.should == location #false
  end                                           
end

job.location评估为 nil 但location.job正确。如果我摆脱它也可以正常工作validates_associated :location。谁能解释为什么这不起作用?

4

1 回答 1

2

作业已经在内存中。或者你在创建位置后重新加载它,或者使用 lambda/expect。例如:

describe Job, "location" do
  it "should have a location" do
    job = Factory(:job)
    location = Factory(:location, :job_id => job.id)
    job.reload
    location.job.should == job      #true
    job.location.should == location #false
  end 

  it "should have a location" do
    job = Factory(:job)

    expect {
      location = Factory(:location, :job_id => job.id) 
    }.to change(job, :location).to(location)
    lambda {
      location = Factory(:location, :job_id => job.id) 
    }.should change(job, :location).to(location)

    location.job.should == job      #true         
  end                                          
end

更多信息在这里:http ://rspec.rubyforge.org/rspec/1.3.0/classes/Spec/Matchers.html#M000168

于 2010-07-23T20:29:55.353 回答