Тест ассоциации rspec работает только в одном направлении
Я обновил до 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
оценивает до нуля, но location.job
верно. Это также работает нормально, если я избавлюсь от validates_associated :location
, Кто-нибудь может объяснить, почему это не работает?
1 ответ
Работа уже в памяти. или вы перезагружаете его после создания локации, или используете лямбда / ожидание. например:
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