Ruby on rails 运行rspec时空表上的SQLite约束异常
我的Rspec测试套件有一个奇怪的问题。将数据插入具有唯一约束的表的所有测试均失败。通过指定行号单独运行失败的测试,效果与预期一致 为了调查这个问题,我在插入导致约束异常的数据之前打印了该表中的行数,它报告该表为空 在任何文件中,都不存在before:all 我使用的是DatabaseCleaner,除了这个问题,看起来清理工作正在进行 例如,在运行整个文件时,此选项不起作用:Ruby on rails 运行rspec时空表上的SQLite约束异常,ruby-on-rails,ruby-on-rails-3,sqlite,rspec,Ruby On Rails,Ruby On Rails 3,Sqlite,Rspec,我的Rspec测试套件有一个奇怪的问题。将数据插入具有唯一约束的表的所有测试均失败。通过指定行号单独运行失败的测试,效果与预期一致 为了调查这个问题,我在插入导致约束异常的数据之前打印了该表中的行数,它报告该表为空 在任何文件中,都不存在before:all 我使用的是DatabaseCleaner,除了这个问题,看起来清理工作正在进行 例如,在运行整个文件时,此选项不起作用: describe User # ... describe '#follow_location' do
describe User
# ...
describe '#follow_location' do
let(:user) { Factory(:user) }
let(:location) { Factory(:location) }
it 'should raise when trying to follow an already followed location' do
puts LocationFollowship.count # => 0
user.followed_locations << location # exception raised
lambda {
user.follow_location location
}.should raise_error User::AlreadyFollowingLocation
end
end
# …
end
描述用户
# ...
描述“跟随位置”做什么
let(:user){Factory(:user)}
let(:位置){Factory(:位置)}
它“在尝试跟踪已跟踪的位置时应引发”do
放置位置followship.count#=>0
user.u位置我也有这个问题。此外,当我试图研究Ruby解释器时,它会在某些情况下出错(可能是由SQLite引起的)
我声明了一个唯一索引,如下所示:
add_index(:table, [:column1, :column2], unique: true)
将以下唯一性约束添加到模型中(除了迁移中的现有索引之外)会消除该问题:
validates_uniqueness_of :column1, scope: :column2
你能带我们看看你的工厂吗?:)也许你添加了一个id字段,他们根本没有设置任何显式id。