测试实例的id

时间:2014-08-15 20:33:24

标签: ruby-on-rails rspec

我有这个集成规范:

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等...)

1 个答案:

答案 0 :(得分:1)

不要对标识符进行硬编码。使用该对象。我的建议是拨打最后一个Location

current_path.should eq location_path(Location.last)