我有这个集成规范:
describe '#new' do
let(:location){ FactoryGirl.build(:location) }
before { visit new_location_path }
context 'when using valid values' do
it 'redirects to show the new location' do
fill_in 'location_latitude', with: location.latitude
fill_in 'location_longitude', with: location.longitude
fill_in 'location_radius', with: location.radius
click_button('Create')
current_path.should eq "/locations/1"
end
end
end
这次失败:
1) LocationsController#new when using valid values redirects to show the new location
Failure/Error: current_path.should eq "/locations/1"
expected: "/locations/1"
got: "/locations/2658"
(compared using ==)
这是因为数据库' id是自动递增的,甚至认为该位置是要保存在位置表中的第一条记录,它的id为2658.
那么我应该如何解决这个问题呢?我可以截断表格,但这很慢,但仍然有点繁琐。
config.before(:all) { DatabaseCleaner.clean_with :truncation } # stop the ID autoincrementing }
config.before(:each) do
DatabaseCleaner.start
end
config.after(:each) do
DatabaseCleaner.clean
end
我仍然需要计算已经保存到表中的位置以了解他们的ID。 (如果在某个规范中有5个位置,我必须记住最后一个位置将是6等...)
答案 0 :(得分:1)
不要对标识符进行硬编码。使用该对象。我的建议是拨打最后一个Location
:
current_path.should eq location_path(Location.last)